home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / enlightenment / e_ipc_handlers.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  232KB  |  7,117 lines

  1. /*
  2.  * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
  3.  */
  4. /* NOTE:
  5.  * 
  6.  * This is a very SPECIAL file. This servers as a kind of "auto code generator"
  7.  * to handle the encoder, decoder etc. aspects of ipc requests. the aim here
  8.  * is to make writing support for a new opcode simple and compact. It intends
  9.  * to centralize the handling into 1 spot, instead of having ti spread around
  10.  * the code in N different places, as well as providing common construct macros
  11.  * to help make the code more compact and easier to create.
  12.  */
  13.  
  14. /* This is a bunch of convenience stuff for this to work */
  15. #ifndef E_IPC_HANDLERS_H
  16. # define E_IPC_HANDLERS_H
  17.  
  18. /* 
  19.  * add a new ooption for enlightenment_remote
  20.  * OP(opt, num_params, description, num_expected_replies, HDL) 
  21.  */
  22. # define OP(__a, __b, __c, __d, __e) \
  23.      {__a, __b, __c, __d, __e},
  24.  
  25.  
  26. # define STRING(__str, HDL) \
  27. case HDL: \
  28. if (e->data) { \
  29.    char *__str = NULL; \
  30.    if (e_ipc_codec_str_dec(e->data, e->size, &__str)) {
  31. # define END_STRING(__str) \
  32.       if (__str) free(__str); \
  33.    } \
  34. } \
  35. break;
  36.  
  37. /**
  38.  * STRING2:
  39.  * decode event data of type E_Ipc_2Str
  40.  */
  41. # define STRING2(__str1, __str2, __2str, HDL) \
  42. case HDL: \
  43. if (e->data) { \
  44.    char *__str1 = NULL, *__str2 = NULL; \
  45.    E_Ipc_2Str *__2str = NULL; \
  46.    __2str = calloc(1, sizeof(E_Ipc_2Str)); \
  47.    if (e_ipc_codec_2str_dec(e->data, e->size, &(__2str))) { \
  48.       __str1 = __2str->str1; \
  49.       __str2 = __2str->str2;
  50. # define END_STRING2(__2str) \
  51.       free(__2str->str1); \
  52.       free(__2str->str2); \
  53.       free(__2str); \
  54.    } \
  55. } \
  56. break;
  57.  
  58. /**
  59.  * INT3_STRING3:
  60.  * Decode event data of type E_Ipc_3Int_3Str
  61.  */
  62. # define INT3_STRING3(__3int_3str, HDL) \
  63. case HDL: \
  64. if (e->data) { \
  65.    E_Ipc_3Int_3Str *__3int_3str = NULL; \
  66.    __3int_3str = calloc(1, sizeof(E_Ipc_3Int_3Str)); \
  67.    if (e_ipc_codec_3int_3str_dec(e->data, e->size, &(__3int_3str))) {
  68. # define END_INT3_STRING3(__3int_3str) \
  69.       free(__3int_3str->str1); \
  70.       free(__3int_3str->str2); \
  71.       free(__3int_3str->str3); \
  72.       free(__3int_3str); \
  73.    } \
  74. } \
  75. break;
  76.  
  77. /**
  78.  * INT4_STRING2:
  79.  * Decode event data of type E_Ipc_4Int_2Str
  80.  */
  81. # define INT4_STRING2(__4int_2str, HDL) \
  82. case HDL: \
  83. if (e->data) { \
  84.    E_Ipc_4Int_2Str *__4int_2str = NULL; \
  85.    __4int_2str = calloc(1, sizeof(E_Ipc_4Int_2Str)); \
  86.    if (e_ipc_codec_4int_2str_dec(e->data, e->size, &(__4int_2str))) {
  87. # define END_INT4_STRING2(__4int_2str) \
  88.       free(__4int_2str->str1); \
  89.       free(__4int_2str->str2); \
  90.       free(__4int_2str); \
  91.    } \
  92. } \
  93. break;
  94.  
  95. /**
  96.  * INT5_STRING2:
  97.  * Decode event data of type E_Ipc_5Int_2Str
  98.  */
  99. # define INT5_STRING2(__5int_2str, HDL) \
  100. case HDL: \
  101. if (e->data) { \
  102.    E_Ipc_5Int_2Str *__5int_2str = NULL; \
  103.    __5int_2str = calloc(1, sizeof(E_Ipc_5Int_2Str)); \
  104.    if (e_ipc_codec_5int_2str_dec(e->data, e->size, &(__5int_2str))) {
  105. # define END_INT5_STRING2(__5int_2str) \
  106.       free(__5int_2str->str1); \
  107.       free(__5int_2str->str2); \
  108.       free(__5int_2str); \
  109.    } \
  110. } \
  111. break;
  112.  
  113. /**
  114.  * INT3_STRING4:
  115.  * Decode event data of type E_Ipc_4Int_2Str
  116.  */
  117. # define INT3_STRING4(__3int_4str, HDL) \
  118. case HDL: \
  119. if (e->data) { \
  120.    E_Ipc_3Int_4Str *__3int_4str = NULL; \
  121.    __3int_4str = calloc(1, sizeof(E_Ipc_3Int_4Str)); \
  122.    if (e_ipc_codec_3int_4str_dec(e->data, e->size, &(__3int_4str))) {
  123. # define END_INT3_STRING4(__3int_4str) \
  124.       free(__3int_4str->str1); \
  125.       free(__3int_4str->str2); \
  126.       free(__3int_4str->str3); \
  127.       free(__3int_4str->str4); \
  128.       free(__3int_4str); \
  129.    } \
  130. } \
  131. break;
  132.  
  133. # define STRING2_INT(__str1, __str2, __int, __2str_int, HDL) \
  134. case HDL: \
  135. if (e->data) { \
  136.    char *__str1 = NULL, *__str2 = NULL; \
  137.    int __int; \
  138.    E_Ipc_2Str_Int *__2str_int = NULL; \
  139.    __2str_int = calloc(1, sizeof(E_Ipc_2Str_Int)); \
  140.    if (e_ipc_codec_2str_int_dec(e->data, e->size, &(__2str_int))) { \
  141.       __str1 = __2str_int->str1; \
  142.       __str2 = __2str_int->str2; \
  143.       __int  = __2str_int->val;
  144. # define END_STRING2_INT(__2str_int) \
  145.       free(__2str_int->str1); \
  146.       free(__2str_int->str2); \
  147.       free(__2str_int); \
  148.    } \
  149. } \
  150. break;
  151.  
  152. # define START_DOUBLE(__dbl, HDL) \
  153. case HDL: \
  154. if (e->data) { \
  155.    double __dbl = 0.0; \
  156.    if (e_ipc_codec_double_dec(e->data, e->size, &(__dbl))) {
  157. # define END_DOUBLE \
  158.    } \
  159. } \
  160. break;
  161.  
  162. # define START_INT(__int, HDL) \
  163. case HDL: \
  164. if (e->data) { \
  165.    int __int = 0; \
  166.    if (e_ipc_codec_int_dec(e->data, e->size, &(__int))) {
  167. # define END_INT \
  168.    } \
  169. } \
  170. break;
  171.  
  172. # define START_2INT(__int1, __int2, HDL) \
  173. case HDL: \
  174. if (e->data) { \
  175.    int __int1 = 0; \
  176.    int __int2 = 0; \
  177.    if (e_ipc_codec_2int_dec(e->data, e->size, &(__int1), &(__int2))) {
  178. # define END_2INT \
  179.    } \
  180. } \
  181. break;
  182.  
  183. /**
  184.  * Get event data for libe processing
  185.  */
  186. # define RESPONSE(__res, __store) \
  187.    __store *__res = calloc(1, sizeof(__store)); \
  188.    if (e->data) {
  189. #define END_RESPONSE(__res, __type) \
  190.    } \
  191.    ecore_event_add(__type, __res, NULL, NULL);
  192. #define END_RESPONSE_CALLBACK(__res, __type, __callback) \
  193.    } \
  194.    ecore_event_add(__type, __res, __callback, NULL);
  195.  
  196. # define SAVE e_config_save_queue()
  197.  
  198. # define REQ_STRING(__str, HDL) \
  199. case HDL: { void *data; int bytes; \
  200.    data = e_ipc_codec_str_enc(__str, &bytes); \
  201.    if (data) { \
  202.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  203.       free(data); \
  204.    } \
  205. } \
  206. break;
  207.  
  208. # define REQ_2STRING(__str1, __str2, HDL) \
  209. case HDL: { void *data; int bytes; \
  210.    data = e_ipc_codec_2str_enc(__str1, __str2, &bytes); \
  211.    if (data) { \
  212.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  213.       free(data); \
  214.    } \
  215. } \
  216. break;
  217.  
  218. #define REQ_2INT_START(HDL) \
  219. case HDL: { void *data; int bytes; \
  220.  
  221. #define REQ_2INT_END(__val1, __val2, HDL) \
  222.    data = e_ipc_codec_2int_enc(__val1, __val2, &bytes); \
  223.    if (data) { \
  224.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  225.       free(data); \
  226.    } \
  227. } \
  228. break;
  229.  
  230. #define REQ_3INT_3STRING_START(HDL) \
  231. case HDL: { void *data; int bytes; \
  232.  
  233. #define REQ_3INT_3STRING_END(__val1, __val2, __val3, __str1, __str2, __str3, HDL) \
  234.    data = e_ipc_codec_3int_3str_enc(__val1, __val2, __val3, __str1, __str2, __str3, &bytes); \
  235.    if (data) { \
  236.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  237.       free(data); \
  238.    } \
  239. } \
  240. break;
  241.  
  242. #define REQ_4INT_2STRING_START(HDL) \
  243. case HDL: { void *data; int bytes; \
  244.  
  245. #define REQ_4INT_2STRING_END(__val1, __val2, __val3, __val4, __str1, __str2, HDL) \
  246.    data = e_ipc_codec_4int_2str_enc(__val1, __val2, __val3, __val4, __str1, __str2, &bytes); \
  247.    if (data) { \
  248.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  249.       free(data); \
  250.    } \
  251. } \
  252. break;
  253.  
  254. #define REQ_5INT_2STRING_START(HDL) \
  255. case HDL: { void *data; int bytes; \
  256.  
  257. #define REQ_5INT_2STRING_END(__val1, __val2, __val3, __val4, __val5, __str1, __str2, HDL) \
  258.    data = e_ipc_codec_5int_2str_enc(__val1, __val2, __val3, __val4, __val5, __str1, __str2, &bytes); \
  259.    if (data) { \
  260.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  261.       free(data); \
  262.    } \
  263. } \
  264. break;
  265.  
  266. #define REQ_3INT_4STRING_START(HDL) \
  267. case HDL: { void *data; int bytes; \
  268.  
  269. #define REQ_3INT_4STRING_END(__val1, __val2, __val3, __str1, __str2, __str3, __str4, HDL) \
  270.    data = e_ipc_codec_3int_4str_enc(__val1, __val2, __val3, __str1, __str2, __str3, __str4, &bytes); \
  271.    if (data) { \
  272.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  273.       free(data); \
  274.    } \
  275. } \
  276. break;
  277.  
  278. # define REQ_2STRING_INT(__str1, __str2, __int, HDL) \
  279. case HDL: { void *data; int bytes; \
  280.    data = e_ipc_codec_2str_int_enc(__str1, __str2, __int, &bytes); \
  281.    if (data) { \
  282.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  283.       free(data); \
  284.    } \
  285. } \
  286. break;
  287.  
  288. # define REQ_DOUBLE(__dbl, HDL) \
  289. case HDL: { void *data; int bytes; \
  290.    data = e_ipc_codec_double_enc(__dbl, &bytes); \
  291.    if (data) { \
  292.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  293.       free(data); \
  294.    } \
  295. } \
  296. break;
  297.  
  298. # define REQ_INT_START(HDL) \
  299. case HDL: { void *data; int bytes;
  300.  
  301. # define REQ_INT_END(__int, HDL) \
  302.    data = e_ipc_codec_int_enc(__int, &bytes); \
  303.    if (data) { \
  304.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  305.       free(data); \
  306.    } \
  307. } \
  308. break;
  309.  
  310. # define REQ_INT(__int, HDL) \
  311.    REQ_INT_START(HDL) \
  312.    REQ_INT_END(__int, HDL)
  313.  
  314. # define REQ_2INT(__int1, __int2, HDL) \
  315. case HDL: { void *data; int bytes; \
  316.    data = e_ipc_codec_2int_enc(__int1, __int2, &bytes); \
  317.    if (data) { \
  318.       ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, data, bytes); \
  319.       free(data); \
  320.    } \
  321. } \
  322. break;
  323.  
  324. # define REQ_NULL(HDL) \
  325. case HDL: \
  326.    ecore_ipc_server_send(e->server, E_IPC_DOMAIN_REQUEST, HDL, 0, 0, 0, NULL, 0); \
  327. break;
  328.  
  329. # define FREE_LIST(__list) \
  330. while (__list) { \
  331.    free(__list->data); \
  332.    __list = evas_list_remove_list(__list, __list); \
  333. }
  334.  
  335. # define SEND_DATA(__opcode) \
  336. ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __opcode, 0, 0, 0, data, bytes); \
  337. free(data);
  338.  
  339. # define STRING_INT_LIST(__v, HDL) \
  340.  case HDL: { \
  341.     Evas_List *dat = NULL, *l; \
  342.     if (e_ipc_codec_str_int_list_dec(e->data, e->size, &dat)) { \
  343.        for (l = dat; l; l = l->next) { \
  344.       E_Ipc_Str_Int *__v; \
  345.       __v = l->data;
  346. #define END_STRING_INT_LIST(__v) \
  347.       free(__v->str); \
  348.       free(__v); \
  349.        } \
  350.        evas_list_free(dat); \
  351.     } \
  352.  } \
  353.    break;
  354.  
  355. #define SEND_STRING_INT_LIST(__list, __typ1, __v1, __v2, HDL) \
  356.  case HDL: { \
  357.     Evas_List *dat = NULL, *l; \
  358.     void *data; int bytes; \
  359.     for (l = __list; l; l = l->next) { \
  360.        __typ1 *__v1; \
  361.        E_Ipc_Str_Int *__v2; \
  362.        __v1 = l->data; \
  363.        __v2 = calloc(1, sizeof(E_Ipc_Str_Int));
  364. #define END_SEND_STRING_INT_LIST(__v1, __op) \
  365.        dat = evas_list_append(dat, __v1); \
  366.     } \
  367.     data = e_ipc_codec_str_int_list_enc(dat, &bytes); \
  368.     SEND_DATA(__op); \
  369.     FREE_LIST(dat); \
  370.  } \
  371.    break;
  372.  
  373. /**
  374.  * INT3_STRING3:
  375.  * Decode event data is a list of E_Ipc_3Int_3Str objects and iterate
  376.  * the list. For each iteration the object __v will contain a decoded list
  377.  * element.
  378.  *
  379.  * Use END_INT3_STRING3_LIST to terminate the loop and free all data. 
  380.  */
  381. #define INT3_STRING3_LIST(__v, HDL) \
  382.    INT3_STRING3_LIST_START(__v, HDL) \
  383.    INT3_STRING3_LIST_ITERATE(__v)
  384.  
  385. #define INT3_STRING3_LIST_START(__v, HDL) \
  386.  case HDL: { \
  387.     Evas_List *dat = NULL, *l; \
  388.     if (e_ipc_codec_3int_3str_list_dec(e->data, e->size, &dat)) {
  389. #define INT3_STRING3_LIST_ITERATE(__v) \
  390.        for (l = dat; l; l = l->next) { \
  391.       E_Ipc_3Int_3Str *__v; \
  392.       __v = l->data;
  393. #define END_INT3_STRING3_LIST(__v) \
  394.    END_INT3_STRING3_LIST_ITERATE(__v) \
  395.    END_INT3_STRING3_LIST_START()
  396.  
  397. #define END_INT3_STRING3_LIST_ITERATE(__v) \
  398.           free(__v->str1); \
  399.           free(__v->str2); \
  400.           free(__v->str3); \
  401.           free(__v); \
  402.        } 
  403. #define END_INT3_STRING3_LIST_START() \
  404.        evas_list_free(dat); \
  405.     } \
  406.  } \
  407.   break;
  408.  
  409. /** 
  410.  * SEND_INT3_STRING3_LIST:
  411.  * Start to encode a list of objects to prepare them for sending via
  412.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  413.  * E_Ipc_3Int_3Str. 
  414.  *
  415.  * Use END_SEND_INT3_STRING3_LIST to terminate the encode iteration and 
  416.  * send that data. The list will be freed.
  417.  */
  418. #define SEND_INT3_STRING3_LIST(__list, __typ1, __v1, __v2, HDL) \
  419.  case HDL: { \
  420.     Evas_List *dat = NULL, *l; \
  421.     void *data; int bytes; \
  422.     for (l = __list; l; l = l->next) { \
  423.        __typ1 *__v1; \
  424.        E_Ipc_3Int_3Str *__v2; \
  425.        __v1 = l->data; \
  426.        __v2 = calloc(1, sizeof(E_Ipc_3Int_3Str));
  427. #define END_SEND_INT3_STRING3_LIST(__v1, __op) \
  428.        dat = evas_list_append(dat, __v1); \
  429.     } \
  430.     data = e_ipc_codec_3int_3str_list_enc(dat, &bytes); \
  431.     SEND_DATA(__op); \
  432.     FREE_LIST(dat); \
  433.  } \
  434.    break;
  435.  
  436. /**
  437.  * INT4_STRING2:
  438.  * Decode event data is a list of E_Ipc_4Int_2Str objects and iterate
  439.  * the list. For each iteration the object __v will contain a decoded list
  440.  * element.
  441.  *
  442.  * Use END_INT4_STRING2_LIST to terminate the loop and free all data. 
  443.  */
  444. #define INT4_STRING2_LIST(__v, HDL) \
  445.    INT4_STRING2_LIST_START(__v, HDL) \
  446.    INT4_STRING2_LIST_ITERATE(__v)
  447.  
  448. #define INT4_STRING2_LIST_START(__v, HDL) \
  449.  case HDL: { \
  450.     Evas_List *dat = NULL, *l; \
  451.     if (e_ipc_codec_4int_2str_list_dec(e->data, e->size, &dat)) { 
  452. #define INT4_STRING2_LIST_ITERATE(__v) \
  453.        for (l = dat; l; l = l->next) { \
  454.       E_Ipc_4Int_2Str *__v; \
  455.       __v = l->data;
  456. #define END_INT4_STRING2_LIST(__v) \
  457.    END_INT4_STRING2_LIST_ITERATE(__v) \
  458.    END_INT4_STRING2_LIST_START()
  459.  
  460. #define END_INT4_STRING2_LIST_ITERATE(__v) \
  461.           free(__v->str1); \
  462.           free(__v->str2); \
  463.           free(__v); \
  464.        } \
  465.        evas_list_free(dat);
  466. #define END_INT4_STRING2_LIST_START() \
  467.     } \
  468.  } \
  469.   break;
  470.  
  471. /** 
  472.  * SEND_INT4_STRING2_LIST:
  473.  * Start to encode a list of objects to prepare them for sending via
  474.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  475.  * E_Ipc_4Int_2Str. 
  476.  *
  477.  * Use END_SEND_INT4_STRING2_LIST to terminate the encode iteration and 
  478.  * send that data. The list will be freed.
  479.  */
  480. #define SEND_INT4_STRING2_LIST(__list, __typ1, __v1, __v2, HDL) \
  481.  case HDL: { \
  482.     Evas_List *dat = NULL, *l; \
  483.     void *data; int bytes; \
  484.     for (l = __list; l; l = l->next) { \
  485.        __typ1 *__v1; \
  486.        E_Ipc_4Int_2Str *__v2; \
  487.        __v1 = l->data; \
  488.        __v2 = calloc(1, sizeof(E_Ipc_4Int_2Str));
  489. #define END_SEND_INT4_STRING2_LIST(__v1, __op) \
  490.        dat = evas_list_append(dat, __v1); \
  491.     } \
  492.     data = e_ipc_codec_4int_2str_list_enc(dat, &bytes); \
  493.     SEND_DATA(__op); \
  494.     FREE_LIST(dat); \
  495.  } \
  496.    break;
  497.  
  498. /**
  499.  * INT5_STRING2:
  500.  * Decode event data is a list of E_Ipc_5Int_2Str objects and iterate
  501.  * the list. For each iteration the object __v will contain a decoded list
  502.  * element.
  503.  *
  504.  * Use END_INT5_STRING2_LIST to terminate the loop and free all data. 
  505.  */
  506. #define INT5_STRING2_LIST(__v, HDL) \
  507.    INT5_STRING2_LIST_START(__v, HDL) \
  508.    INT5_STRING2_LIST_ITERATE(__v)
  509.  
  510. #define INT5_STRING2_LIST_START(__v, HDL) \
  511.  case HDL: { \
  512.     Evas_List *dat = NULL, *l; \
  513.     if (e_ipc_codec_5int_2str_list_dec(e->data, e->size, &dat)) { 
  514. #define INT5_STRING2_LIST_ITERATE(__v) \
  515.        for (l = dat; l; l = l->next) { \
  516.       E_Ipc_5Int_2Str *__v; \
  517.       __v = l->data;
  518. #define END_INT5_STRING2_LIST(__v) \
  519.    END_INT5_STRING2_LIST_ITERATE(__v) \
  520.    END_INT5_STRING2_LIST_START()
  521.  
  522. #define END_INT5_STRING2_LIST_ITERATE(__v) \
  523.           free(__v->str1); \
  524.           free(__v->str2); \
  525.           free(__v); \
  526.        } \
  527.        evas_list_free(dat);
  528. #define END_INT5_STRING2_LIST_START() \
  529.     } \
  530.  } \
  531.   break;
  532.  
  533. /** 
  534.  * SEND_INT5_STRING2_LIST:
  535.  * Start to encode a list of objects to prepare them for sending via
  536.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  537.  * E_Ipc_5Int_2Str. 
  538.  *
  539.  * Use END_SEND_INT5_STRING2_LIST to terminate the encode iteration and 
  540.  * send that data. The list will be freed.
  541.  */
  542. #define SEND_INT5_STRING2_LIST(__list, __typ1, __v1, __v2, HDL) \
  543.  case HDL: { \
  544.     Evas_List *dat = NULL, *l; \
  545.     void *data; int bytes; \
  546.     for (l = __list; l; l = l->next) { \
  547.        __typ1 *__v1; \
  548.        E_Ipc_5Int_2Str *__v2; \
  549.        __v1 = l->data; \
  550.        __v2 = calloc(1, sizeof(E_Ipc_5Int_2Str));
  551. #define END_SEND_INT5_STRING2_LIST(__v1, __op) \
  552.        dat = evas_list_append(dat, __v1); \
  553.     } \
  554.     data = e_ipc_codec_5int_2str_list_enc(dat, &bytes); \
  555.     SEND_DATA(__op); \
  556.     FREE_LIST(dat); \
  557.  } \
  558.    break;
  559.  
  560. /**
  561.  * INT3_STRING4:
  562.  * Decode event data is a list of E_Ipc_3Int_4Str objects and iterate
  563.  * the list. For each iteration the object __v will contain a decoded list
  564.  * element.
  565.  *
  566.  * Use END_INT3_STRING4_LIST to terminate the loop and free all data. 
  567.  */
  568. #define INT3_STRING4_LIST(__v, HDL) \
  569.    INT3_STRING4_LIST_START(__v, HDL) \
  570.    INT3_STRING4_LIST_ITERATE(__v)
  571.  
  572. #define INT3_STRING4_LIST_START(__v, HDL) \
  573.  case HDL: { \
  574.     Evas_List *dat = NULL, *l; \
  575.     if (e_ipc_codec_3int_4str_list_dec(e->data, e->size, &dat)) { 
  576. #define INT3_STRING4_LIST_ITERATE(__v) \
  577.        for (l = dat; l; l = l->next) { \
  578.       E_Ipc_3Int_4Str *__v; \
  579.       __v = l->data;
  580. #define END_INT3_STRING4_LIST(__v) \
  581.    END_INT3_STRING4_LIST_ITERATE(__v) \
  582.    END_INT3_STRING4_LIST_START()
  583.  
  584. #define END_INT3_STRING4_LIST_ITERATE(__v) \
  585.           free(__v->str1); \
  586.           free(__v->str2); \
  587.           free(__v->str3); \
  588.           free(__v->str4); \
  589.           free(__v); \
  590.        } \
  591.        evas_list_free(dat);
  592. #define END_INT3_STRING4_LIST_START() \
  593.     } \
  594.  } \
  595.   break;
  596.  
  597. /** 
  598.  * SEND_INT3_STRING4_LIST:
  599.  * Start to encode a list of objects to prepare them for sending via
  600.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  601.  * E_Ipc_3Int_4Str. 
  602.  *
  603.  * Use END_SEND_INT3_STRING4_LIST to terminate the encode iteration and 
  604.  * send that data. The list will be freed.
  605.  */
  606. #define SEND_INT3_STRING4_LIST(__list, __typ1, __v1, __v2, HDL) \
  607.  case HDL: { \
  608.     Evas_List *dat = NULL, *l; \
  609.     void *data; int bytes; \
  610.     for (l = __list; l; l = l->next) { \
  611.        __typ1 *__v1; \
  612.        E_Ipc_3Int_4Str *__v2; \
  613.        __v1 = l->data; \
  614.        __v2 = calloc(1, sizeof(E_Ipc_3Int_4Str));
  615. #define END_SEND_INT3_STRING4_LIST(__v1, __op) \
  616.        dat = evas_list_append(dat, __v1); \
  617.     } \
  618.     data = e_ipc_codec_3int_4str_list_enc(dat, &bytes); \
  619.     SEND_DATA(__op); \
  620.     FREE_LIST(dat); \
  621.  } \
  622.    break;
  623.  
  624. /**
  625.  * STRING2_INT_LIST:
  626.  * Decode event data which is a list of E_Ipc_2Str_Int objects and iterate 
  627.  * the list. For each iteration the object __v will contain a decoded list
  628.  * element. 
  629.  *
  630.  * Use END_STRING2_INT_LIST to terminate the loop and free all data.
  631.  */
  632. #define STRING2_INT_LIST(__v, HDL) \
  633.  case HDL: { \
  634.     Evas_List *dat = NULL, *l; \
  635.     if (e_ipc_codec_2str_int_list_dec(e->data, e->size, &dat)) { \
  636.        for (l = dat; l; l = l->next) { \
  637.       E_Ipc_2Str_Int *__v; \
  638.       __v = l->data;
  639. #define END_STRING2_INT_LIST(__v) \
  640.       free(__v->str1); \
  641.       free(__v->str2); \
  642.       free(__v); \
  643.        } \
  644.        evas_list_free(dat); \
  645.     } \
  646.  } \
  647.    break;
  648.  
  649. /** 
  650.  * SEND_STRING2_INT_LIST:
  651.  * Start to encode a list of objects to prepare them for sending via
  652.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  653.  * E_Ipc_2Str_Int. 
  654.  *
  655.  * Use END_SEND_STRING2_INT_LIST to terminate the encode iteration and 
  656.  * send that data. The list will be freed.
  657.  */
  658. #define SEND_STRING2_INT_LIST(__list, __typ1, __v1, __v2, HDL) \
  659.  case HDL: { \
  660.     Evas_List *dat = NULL, *l; \
  661.     void *data; int bytes; \
  662.     for (l = __list; l; l = l->next) { \
  663.        __typ1 *__v1; \
  664.        E_Ipc_2Str_Int *__v2; \
  665.        __v1 = l->data; \
  666.        __v2 = calloc(1, sizeof(E_Ipc_2Str_Int));
  667. #define END_SEND_STRING2_INT_LIST(__v1, __op) \
  668.        dat = evas_list_append(dat, __v1); \
  669.     } \
  670.     data = e_ipc_codec_2str_int_list_enc(dat, &bytes); \
  671.     SEND_DATA(__op); \
  672.     FREE_LIST(dat); \
  673.  } \
  674.    break;
  675.  
  676. /**
  677.  * STRING2_LIST:
  678.  * Decode event data which is a list of E_Ipc_2Str objects and iterate 
  679.  * the list. For each iteration the object __v will contain a decoded list
  680.  * element. 
  681.  *
  682.  * Use END_STRING2_LIST to terminate the loop and free all data.
  683.  */
  684. #define STRING2_LIST(__v, HDL) \
  685.  case HDL: { \
  686.     Evas_List *dat = NULL, *l; \
  687.     if (e_ipc_codec_2str_list_dec(e->data, e->size, &dat)) { \
  688.        for (l = dat; l; l = l->next) { \
  689.       E_Ipc_2Str *__v; \
  690.       __v = l->data;
  691. #define END_STRING2_LIST(__v) \
  692.       free(__v->str1); \
  693.       free(__v->str2); \
  694.       free(__v); \
  695.        } \
  696.        evas_list_free(dat); \
  697.     } \
  698.  } \
  699.    break;
  700.  
  701. /** 
  702.  * SEND_STRING2_LIST:
  703.  * Start to encode a list of objects to prepare them for sending via
  704.  * ipc. The object __v1 will be of type __typ1 and __v2 will be of type
  705.  * E_Ipc_2Str. 
  706.  *
  707.  * Use END_SEND_STRING2_LIST to terminate the encode iteration and 
  708.  * send that data. The list will be freed.
  709.  */
  710. #define SEND_STRING2_LIST(__list, __typ1, __v1, __v2, HDL) \
  711.  case HDL: { \
  712.     Evas_List *dat = NULL, *l; \
  713.     void *data; int bytes; \
  714.     for (l = __list; l; l = l->next) { \
  715.        __typ1 *__v1; \
  716.        E_Ipc_2Str *__v2; \
  717.        __v1 = l->data; \
  718.        __v2 = calloc(1, sizeof(E_Ipc_2Str));
  719. #define END_SEND_STRING2_LIST(__v1, __op) \
  720.        dat = evas_list_append(dat, __v1); \
  721.     } \
  722.     data = e_ipc_codec_2str_list_enc(dat, &bytes); \
  723.     SEND_DATA(__op); \
  724.     FREE_LIST(dat); \
  725.  } \
  726.    break;
  727.  
  728.  
  729. #define SEND_STRING(__str, __op, HDL) \
  730. case HDL: { void *data; int bytes = 0; \
  731.    data = e_ipc_codec_str_enc(__str, &bytes); \
  732.    ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __op, 0, 0, 0, data, bytes); \
  733.    if (data) { \
  734.       free(data); \
  735.    } \
  736. } \
  737. break;
  738.  
  739. #define SEND_DOUBLE(__dbl, __op, HDL) \
  740. case HDL: { void *data; int bytes; \
  741.    data = e_ipc_codec_double_enc(__dbl, &bytes); \
  742.    if (data) { \
  743.       ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __op, 0, 0, 0, data, bytes); \
  744.       free(data); \
  745.    } \
  746. } \
  747. break;
  748.  
  749. # define SEND_INT(__int, __op, HDL) \
  750. case HDL: { void *data; int bytes; \
  751.    data = e_ipc_codec_int_enc(__int, &bytes); \
  752.    if (data) { \
  753.       ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __op, 0, 0, 0, data, bytes); \
  754.       free(data); \
  755.    } \
  756. } \
  757. break;
  758.  
  759. # define SEND_2INT(__int1, __int2,__op, HDL) \
  760. case HDL: { void *data; int bytes; \
  761.    data = e_ipc_codec_2int_enc(__int1, __int2, &bytes); \
  762.    if (data) { \
  763.       ecore_ipc_client_send(e->client, E_IPC_DOMAIN_REPLY, __op, 0, 0, 0, data, bytes); \
  764.       free(data); \
  765.    } \
  766. } \
  767. break;
  768.  
  769. #define LIST_DATA() \
  770.    Evas_List *dat = NULL, *l; \
  771.    void *data; int bytes;
  772.  
  773. #define ENCODE(__dat, __enc) \
  774.    data = __enc(__dat, &bytes);
  775.  
  776. #define FOR(__start) \
  777.    for (l = __start; l; l = l->next)
  778. #define GENERIC(HDL) \
  779.  case HDL: {
  780.  
  781. #define END_GENERIC() \
  782.    } \
  783. break;
  784.  
  785. #define LIST() \
  786.    Evas_List *dat = NULL, *l;
  787.  
  788. #define DECODE(__dec) \
  789.    if (__dec(e->data, e->size, &dat))
  790.  
  791. # define E_PATH_GET(__path, __str) \
  792.    E_Path *__path = NULL; \
  793.    if (!strcmp(__str, "data")) \
  794.      __path = path_data; \
  795.    else if (!strcmp(__str, "images")) \
  796.      __path = path_images; \
  797.    else if (!strcmp(__str, "fonts")) \
  798.      __path = path_fonts; \
  799.    else if (!strcmp(__str, "themes")) \
  800.      __path = path_themes; \
  801.    else if (!strcmp(__str, "init")) \
  802.      __path = path_init; \
  803.    else if (!strcmp(__str, "icons")) \
  804.      __path = path_icons; \
  805.    else if (!strcmp(__str, "modules")) \
  806.      __path = path_modules; \
  807.    else if (!strcmp(__str, "backgrounds")) \
  808.      __path = path_backgrounds; \
  809.    else if (!strcmp(__str, "input_methods")) \
  810.      __path = path_input_methods; \
  811.    else if (!strcmp(__str, "messages")) \
  812.      __path = path_messages; 
  813.  
  814. #endif
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825. /*
  826.  * ****************
  827.  * IPC handlers
  828.  * ****************
  829.  */
  830.  
  831. /* what a handler looks like
  832.  * 
  833.  * E_REMOTE_OPTIONS
  834.  *   OP(opt, num_params, description, num_expected_replies, HDL)
  835.  * E_REMOTE_OUT
  836.  *   ...
  837.  * E_WM_IN
  838.  *   ...
  839.  * E_REMOTE_IN
  840.  *   ...
  841.  * E_LIB_IN
  842.  *   ...
  843.  */
  844. /****************************************************************************/
  845. #define HDL E_IPC_EFM_START
  846. #if (TYPE == E_REMOTE_OPTIONS)
  847.    OP("-start-efm", 1, "Starts the E File Manager in Directory 'OPT1'", 0, HDL)
  848. #elif (TYPE == E_REMOTE_OUT)
  849.      REQ_STRING(params[0], HDL);
  850. #elif (TYPE == E_WM_IN)
  851.    STRING(s, HDL);
  852.    E_Fileman *fileman;
  853.    fileman = e_fileman_new_to_dir(e_container_current_get(e_manager_current_get()), s);
  854.    e_fileman_show (fileman);
  855.    END_STRING(s);
  856. #elif (TYPE == E_REMOTE_IN)
  857. #endif
  858. #undef HDL
  859. /****************************************************************************/
  860. #define HDL E_IPC_EAP_EDIT_START
  861. #if (TYPE == E_REMOTE_OPTIONS)
  862.    OP("-start-eap-edit", 1, "Starts the Eap editor on the eap 'OPT1'", 0, HDL)
  863. #elif (TYPE == E_REMOTE_OUT)
  864.      REQ_STRING(params[0], HDL);
  865. #elif (TYPE == E_WM_IN)
  866.    STRING(s, HDL);
  867.    E_App *a;
  868.    if(ecore_file_exists(s))
  869.      {
  870.     a = e_app_new(s, 0);
  871.     if(a)
  872.       e_eap_edit_show(e_container_current_get(e_manager_current_get()), a);
  873.      }
  874.    else
  875.     {
  876.        a = e_app_empty_new(s);
  877.        if(a)
  878.      e_eap_edit_show(e_container_current_get(e_manager_current_get()), a);
  879.     }
  880.    END_STRING(s);
  881. #elif (TYPE == E_REMOTE_IN)
  882. #endif
  883. #undef HDL
  884. /****************************************************************************/
  885. #define HDL E_IPC_OP_MODULE_LOAD
  886. #if (TYPE == E_REMOTE_OPTIONS)
  887.    OP("-module-load", 1, "Loads the module named 'OPT1' into memory", 0, HDL)
  888. #elif (TYPE == E_REMOTE_OUT)
  889.    REQ_STRING(params[0], HDL);
  890. #elif (TYPE == E_WM_IN)
  891.    STRING(s, HDL);
  892.    if (!e_module_find(s)) {
  893.       e_module_new(s);
  894.       SAVE;
  895.    }
  896.    END_STRING(s);
  897. #elif (TYPE == E_REMOTE_IN)
  898. #endif
  899. #undef HDL
  900.      
  901. /****************************************************************************/
  902. #define HDL E_IPC_OP_MODULE_UNLOAD
  903. #if (TYPE == E_REMOTE_OPTIONS)
  904.    OP("-module-unload", 1, "Unloads the module named 'OPT1' from memory", 0, HDL)
  905. #elif (TYPE == E_REMOTE_OUT)
  906.    REQ_STRING(params[0], HDL);
  907. #elif (TYPE == E_WM_IN)
  908.    STRING(s, HDL);
  909.    E_Module *m;
  910.    if ((m = e_module_find(s))) {
  911.       e_module_disable(m);
  912.       e_object_del(E_OBJECT(m));
  913.       SAVE;
  914.    }
  915.    END_STRING(s);
  916. #elif (TYPE == E_REMOTE_IN)
  917. #endif
  918. #undef HDL
  919.    
  920. /****************************************************************************/
  921. #define HDL E_IPC_OP_MODULE_ENABLE
  922. #if (TYPE == E_REMOTE_OPTIONS)
  923.    OP("-module-enable", 1, "Enable the module named 'OPT1'", 0, HDL)
  924. #elif (TYPE == E_REMOTE_OUT)
  925.    REQ_STRING(params[0], HDL);
  926. #elif (TYPE == E_WM_IN)
  927.    STRING(s, HDL);
  928.    E_Module *m;
  929.    if ((m = e_module_find(s))) {
  930.       e_module_enable(m);
  931.       SAVE;
  932.    }
  933.    END_STRING(s);
  934. #elif (TYPE == E_REMOTE_IN)
  935. #endif
  936. #undef HDL
  937.      
  938. /****************************************************************************/
  939. #define HDL E_IPC_OP_MODULE_DISABLE
  940. #if (TYPE == E_REMOTE_OPTIONS)
  941.    OP("-module-disable", 1, "Disable the module named 'OPT1'", 0, HDL)
  942. #elif (TYPE == E_REMOTE_OUT)
  943.    REQ_STRING(params[0], HDL);
  944. #elif (TYPE == E_WM_IN)
  945.    STRING(s, HDL);
  946.    E_Module *m;
  947.    if ((m = e_module_find(s))) {
  948.       e_module_disable(m);
  949.       SAVE;
  950.    }
  951.    END_STRING(s);
  952. #elif (TYPE == E_REMOTE_IN)
  953. #endif
  954. #undef HDL
  955.      
  956. /****************************************************************************/
  957. #define HDL E_IPC_OP_MODULE_LIST
  958. #if (TYPE == E_REMOTE_OPTIONS)
  959.    OP("-module-list", 0, "List all loaded modules", 1, HDL)
  960. #elif (TYPE == E_REMOTE_OUT)
  961.    REQ_NULL(HDL);
  962. #elif (TYPE == E_WM_IN)
  963.    SEND_STRING_INT_LIST(e_module_list(), E_Module, mod, v, HDL);
  964.    v->str = mod->name;
  965.    v->val = mod->enabled;
  966.    END_SEND_STRING_INT_LIST(v, E_IPC_OP_MODULE_LIST_REPLY);
  967. #elif (TYPE == E_REMOTE_IN)
  968. #endif
  969. #undef HDL
  970.      
  971. /****************************************************************************/
  972. #define HDL E_IPC_OP_MODULE_LIST_REPLY
  973. #if (TYPE == E_REMOTE_OPTIONS)
  974. #elif (TYPE == E_REMOTE_OUT)
  975. #elif (TYPE == E_WM_IN)
  976. #elif (TYPE == E_REMOTE_IN)
  977.    STRING_INT_LIST(v, HDL);
  978.    if (v->str) printf("REPLY: \"%s\" ENABLED %i\n", v->str, v->val);
  979.    else printf("REPLY: \"\" ENABLED %i\n", v->val);
  980.    END_STRING_INT_LIST(v);
  981. #elif (TYPE == E_LIB_IN)
  982.    GENERIC(HDL);
  983.    Evas_List *dat = NULL;
  984.    DECODE(e_ipc_codec_str_int_list_dec) {
  985.       LIST();
  986.       int count;
  987.       RESPONSE(r, E_Response_Module_List);
  988.  
  989.       /* FIXME - this is a mess, needs to be merged into macros... */
  990.       count = evas_list_count(dat);
  991.       r->modules = malloc(sizeof(E_Response_Module_Data *) * count);
  992.       r->count = count;
  993.  
  994.       count = 0;
  995.       FOR(dat) {
  996.      E_Response_Module_Data *md;
  997.      E_Ipc_Str_Int *v;
  998.      
  999.      v = l->data;
  1000.      md = malloc(sizeof(E_Response_Module_Data));
  1001.      
  1002.      md->name = v->str;
  1003.      md->enabled = v->val;
  1004.      r->modules[count] = md;
  1005.      count++;
  1006.       }
  1007.       END_RESPONSE_CALLBACK(r, E_RESPONSE_MODULE_LIST, _e_cb_module_list_free);
  1008.    }
  1009.    END_GENERIC();
  1010. #endif
  1011. #undef HDL
  1012.      
  1013. /****************************************************************************/
  1014. #define HDL E_IPC_OP_BG_SET
  1015. #if (TYPE == E_REMOTE_OPTIONS)
  1016.    OP("-default-bg-set", 1, "Set the default background edje to the desktop background in the file 'OPT1' (must be a full path)", 0, HDL)
  1017. #elif (TYPE == E_REMOTE_OUT)
  1018.    REQ_STRING(params[0], HDL);
  1019. #elif (TYPE == E_WM_IN)
  1020.    STRING(s, HDL);
  1021.    /* TODO: Check if file exists */
  1022.    if (e_config->desktop_default_background) evas_stringshare_del(e_config->desktop_default_background);
  1023.    e_config->desktop_default_background = NULL;
  1024.    if (s) e_config->desktop_default_background = evas_stringshare_add(s);
  1025.    e_bg_update();
  1026.    SAVE;
  1027.    END_STRING(s);
  1028. #elif (TYPE == E_REMOTE_IN)
  1029. #endif
  1030. #undef HDL
  1031.      
  1032. /****************************************************************************/
  1033. #define HDL E_IPC_OP_BG_GET
  1034. #if (TYPE == E_REMOTE_OPTIONS)
  1035.    OP("-default-bg-get", 0, "Get the default background edje file path", 1, HDL)
  1036. #elif (TYPE == E_REMOTE_OUT)
  1037.    REQ_NULL(HDL);
  1038. #elif (TYPE == E_WM_IN)
  1039.    SEND_STRING(e_config->desktop_default_background, E_IPC_OP_BG_GET_REPLY, HDL);
  1040. #elif (TYPE == E_REMOTE_IN)
  1041. #endif
  1042. #undef HDL
  1043.      
  1044. /****************************************************************************/
  1045. #define HDL E_IPC_OP_BG_GET_REPLY
  1046. #if (TYPE == E_REMOTE_OPTIONS)
  1047. #elif (TYPE == E_REMOTE_OUT)
  1048. #elif (TYPE == E_WM_IN)
  1049. #elif (TYPE == E_REMOTE_IN)
  1050.    STRING(s, HDL);
  1051.    if (s) printf("REPLY: \"%s\"\n", s);
  1052.    else printf("REPLY: \"\"\n");
  1053.    END_STRING(s);
  1054. #elif (TYPE == E_LIB_IN)
  1055.    STRING(s, HDL);
  1056.    RESPONSE(r, E_Response_Background_Get);
  1057.    if (s) r->file = strdup(s);
  1058.    END_RESPONSE(r, E_RESPONSE_BACKGROUND_GET);
  1059.    END_STRING(s);
  1060. #endif
  1061. #undef HDL
  1062.      
  1063. /****************************************************************************/
  1064. #define HDL E_IPC_OP_FONT_AVAILABLE_LIST
  1065. #if (TYPE == E_REMOTE_OPTIONS)
  1066.    OP("-font-available-list", 0, "List all available fonts", 1, HDL)
  1067. #elif (TYPE == E_REMOTE_OUT)
  1068.    REQ_NULL(HDL);
  1069. #elif (TYPE == E_WM_IN)
  1070.    GENERIC(HDL);
  1071.    LIST_DATA();
  1072.    E_Font_Available *fa;
  1073.    Evas_List *fa_list;
  1074.    fa_list = e_font_available_list();
  1075.    FOR(fa_list) { fa = l->data;
  1076.       dat = evas_list_append(dat, fa->name);
  1077.    }
  1078.    ENCODE(dat, e_ipc_codec_str_list_enc);
  1079.    SEND_DATA(E_IPC_OP_FONT_AVAILABLE_LIST_REPLY);
  1080.    evas_list_free(dat);
  1081.    e_font_available_list_free(fa_list);
  1082.    END_GENERIC();
  1083. #elif (TYPE == E_REMOTE_IN)
  1084. #endif
  1085. #undef HDL
  1086.      
  1087. /****************************************************************************/
  1088. #define HDL E_IPC_OP_FONT_AVAILABLE_LIST_REPLY
  1089. #if (TYPE == E_REMOTE_OPTIONS)
  1090. #elif (TYPE == E_REMOTE_OUT)
  1091. #elif (TYPE == E_WM_IN)
  1092. #elif (TYPE == E_REMOTE_IN)
  1093.    GENERIC(HDL);
  1094.    LIST();
  1095.    DECODE(e_ipc_codec_str_list_dec) {
  1096.       FOR(dat) {
  1097.      if (l->data) printf("REPLY: \"%s\"\n", (char *)(l->data));
  1098.      else printf("REPLY: \"\"\n");
  1099.       }
  1100.       FREE_LIST(dat);
  1101.    }
  1102.    END_GENERIC();
  1103. #endif
  1104. #undef HDL
  1105.  
  1106. /****************************************************************************/
  1107. #define HDL E_IPC_OP_FONT_APPLY
  1108. #if (TYPE == E_REMOTE_OPTIONS)
  1109.    OP("-font-apply", 0, "Apply font settings changes", 0, HDL)
  1110. #elif (TYPE == E_REMOTE_OUT)
  1111.    REQ_NULL(HDL);
  1112. #elif (TYPE == E_WM_IN)
  1113.    GENERIC(HDL);
  1114.    e_font_apply();
  1115.    SAVE;
  1116.    END_GENERIC();
  1117. #elif (TYPE == E_REMOTE_IN)
  1118. #endif
  1119. #undef HDL
  1120.  
  1121. /****************************************************************************/
  1122. #define HDL E_IPC_OP_FONT_FALLBACK_APPEND
  1123. #if (TYPE == E_REMOTE_OPTIONS)
  1124.    OP(    "-font-fallback-append", 
  1125.     1 /*num_params*/, 
  1126.     "Append OPT1 to the fontset", 
  1127.     0 /*num_expected_replies*/, 
  1128.     HDL)
  1129. #elif (TYPE == E_REMOTE_OUT)
  1130.    REQ_STRING(params[0], HDL);
  1131. #elif (TYPE == E_WM_IN)
  1132.    STRING(s, HDL);
  1133.    e_font_fallback_append(s);
  1134.    SAVE;   
  1135.    END_STRING(s);
  1136. #elif (TYPE == E_REMOTE_IN)
  1137. #endif
  1138. #undef HDL
  1139.  
  1140. /****************************************************************************/
  1141. #define HDL E_IPC_OP_FONT_FALLBACK_PREPEND
  1142. #if (TYPE == E_REMOTE_OPTIONS)
  1143.    OP(    "-font-fallback-prepend", 
  1144.     1 /*num_params*/, 
  1145.     "Prepend OPT1 to the fontset", 
  1146.     0 /*num_expected_replies*/, 
  1147.     HDL)
  1148. #elif (TYPE == E_REMOTE_OUT)
  1149.    REQ_STRING(params[0], HDL);
  1150. #elif (TYPE == E_WM_IN)
  1151.    STRING(s, HDL);
  1152.    e_font_fallback_prepend(s);
  1153.    SAVE;   
  1154.    END_STRING(s);
  1155. #elif (TYPE == E_REMOTE_IN)
  1156. #endif
  1157. #undef HDL
  1158.  
  1159. /****************************************************************************/
  1160. #define HDL E_IPC_OP_FONT_FALLBACK_LIST
  1161. #if (TYPE == E_REMOTE_OPTIONS)
  1162.    OP("-font-fallback-list", 0, "List the fallback fonts in order", 1, HDL)
  1163. #elif (TYPE == E_REMOTE_OUT)
  1164.    REQ_NULL(HDL);
  1165. #elif (TYPE == E_WM_IN)
  1166.    GENERIC(HDL);
  1167.  
  1168.    LIST_DATA();
  1169.    E_Font_Fallback *ff;
  1170.    FOR(e_config->font_fallbacks) { ff = l->data;
  1171.       dat = evas_list_append(dat, ff->name);
  1172.    }
  1173.    ENCODE(dat, e_ipc_codec_str_list_enc);
  1174.    SEND_DATA(E_IPC_OP_FONT_FALLBACK_LIST_REPLY);
  1175.    evas_list_free(dat);
  1176.  
  1177.    END_GENERIC();
  1178. #elif (TYPE == E_REMOTE_IN)
  1179. #endif
  1180. #undef HDL
  1181.  
  1182. /****************************************************************************/
  1183. #define HDL E_IPC_OP_FONT_FALLBACK_LIST_REPLY
  1184. #if (TYPE == E_REMOTE_OPTIONS)
  1185. #elif (TYPE == E_REMOTE_OUT)
  1186. #elif (TYPE == E_WM_IN)
  1187. #elif (TYPE == E_REMOTE_IN)
  1188.    GENERIC(HDL);
  1189.    LIST();
  1190.    DECODE(e_ipc_codec_str_list_dec) {
  1191.       FOR(dat) {
  1192.      if (l->data) printf("REPLY: \"%s\"\n", (char *)(l->data));
  1193.      else printf("REPLY: \"\"\n");
  1194.       }
  1195.       FREE_LIST(dat);
  1196.    }
  1197.    END_GENERIC();
  1198. #endif
  1199. #undef HDL
  1200.  
  1201. /****************************************************************************/
  1202. #define HDL E_IPC_OP_FONT_FALLBACK_REMOVE
  1203. #if (TYPE == E_REMOTE_OPTIONS)
  1204.    OP("-font-fallback-remove", 1, "Remove OPT1 from the fontset", 0, HDL)
  1205. #elif (TYPE == E_REMOTE_OUT)
  1206.    REQ_STRING(params[0], HDL);
  1207. #elif (TYPE == E_WM_IN)
  1208.    STRING(s, HDL);
  1209.    e_font_fallback_remove(s);
  1210.    SAVE;   
  1211.    END_STRING(s);
  1212. #elif (TYPE == E_REMOTE_IN)
  1213. #endif
  1214. #undef HDL
  1215.  
  1216. /****************************************************************************/
  1217. #define HDL E_IPC_OP_FONT_DEFAULT_SET
  1218. #if (TYPE == E_REMOTE_OPTIONS)
  1219.    OP("-font-default-set", 3, "Set textclass (OPT1) font (OPT2) and size (OPT3)", 0, HDL)
  1220. #elif (TYPE == E_REMOTE_OUT)
  1221.    REQ_2STRING_INT(params[0], params[1], atoi(params[2]), HDL) 
  1222. #elif (TYPE == E_WM_IN)
  1223.    STRING2_INT(text_class, font_name, font_size, e_2str_int, HDL);
  1224.    /* TODO: Check if font_name (and text_class?) exists */
  1225.    e_font_default_set(text_class, font_name, font_size);
  1226.    SAVE;   
  1227.    END_STRING2_INT(e_2str_int);
  1228. #elif (TYPE == E_REMOTE_IN)
  1229. #endif
  1230. #undef HDL
  1231.  
  1232. /****************************************************************************/
  1233. #define HDL E_IPC_OP_FONT_DEFAULT_GET
  1234. #if (TYPE == E_REMOTE_OPTIONS)
  1235.    OP("-font-default-get", 1, "List the default font associated with OPT1", 1, HDL)
  1236. #elif (TYPE == E_REMOTE_OUT)
  1237.    REQ_STRING(params[0], HDL);
  1238. #elif (TYPE == E_WM_IN)
  1239.    STRING(text_class, HDL);
  1240.    E_Font_Default *efd;
  1241.    void *data;
  1242.    int bytes;
  1243.    
  1244.    efd = e_font_default_get(text_class);
  1245.    if (efd == NULL)
  1246.      data = NULL;
  1247.    else
  1248.      data = e_ipc_codec_2str_int_enc(efd->text_class, efd->font, efd->size, &bytes);
  1249.     
  1250.    SEND_DATA(E_IPC_OP_FONT_DEFAULT_GET_REPLY);
  1251.  
  1252.    END_STRING(text_class);
  1253. #elif (TYPE == E_REMOTE_IN)
  1254. #endif
  1255. #undef HDL
  1256.  
  1257. /****************************************************************************/
  1258. #define HDL E_IPC_OP_FONT_DEFAULT_GET_REPLY
  1259. #if (TYPE == E_REMOTE_OPTIONS)
  1260. #elif (TYPE == E_REMOTE_OUT)
  1261. #elif (TYPE == E_WM_IN)
  1262. #elif (TYPE == E_REMOTE_IN)
  1263.    STRING2_INT(text_class, font_name, font_size, e_2str_int, HDL);
  1264.    printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n",
  1265.       text_class, font_name, font_size); 
  1266.    END_STRING2_INT(e_2str_int);
  1267. #endif
  1268. #undef HDL
  1269.  
  1270. /****************************************************************************/
  1271. #define HDL E_IPC_OP_FONT_DEFAULT_REMOVE
  1272. #if (TYPE == E_REMOTE_OPTIONS)
  1273.    OP("-font-default-remove", 1, "Remove the default text class OPT1", 0, HDL)
  1274. #elif (TYPE == E_REMOTE_OUT)
  1275.    REQ_STRING(params[0], HDL);
  1276. #elif (TYPE == E_WM_IN)
  1277.    STRING(text_class, HDL);
  1278.    e_font_default_remove(text_class);
  1279.    SAVE;
  1280.    END_STRING(text_class);
  1281. #elif (TYPE == E_REMOTE_IN)
  1282. #endif
  1283. #undef HDL
  1284.  
  1285. /****************************************************************************/
  1286. #define HDL E_IPC_OP_FONT_DEFAULT_LIST
  1287. #if (TYPE == E_REMOTE_OPTIONS)
  1288.    OP("-font-default-list", 0, "List all configured text classes", 1, HDL)
  1289. #elif (TYPE == E_REMOTE_OUT)
  1290.    REQ_NULL(HDL);
  1291. #elif (TYPE == E_WM_IN)
  1292.    SEND_STRING2_INT_LIST(e_font_default_list(), E_Font_Default, efd, v, HDL);
  1293.    v->str1 = efd->text_class;
  1294.    v->str2 = efd->font;
  1295.    v->val  = efd->size;
  1296.    END_SEND_STRING2_INT_LIST(v, E_IPC_OP_FONT_DEFAULT_LIST_REPLY);
  1297. #elif (TYPE == E_REMOTE_IN)
  1298. #endif
  1299. #undef HDL
  1300.  
  1301. /****************************************************************************/
  1302. #define HDL E_IPC_OP_FONT_DEFAULT_LIST_REPLY
  1303. #if (TYPE == E_REMOTE_OPTIONS)
  1304. #elif (TYPE == E_REMOTE_OUT)
  1305. #elif (TYPE == E_WM_IN)
  1306. #elif (TYPE == E_REMOTE_IN)
  1307.    STRING2_INT_LIST(v, HDL);
  1308.    printf("REPLY: DEFAULT TEXT_CLASS=\"%s\" NAME=\"%s\" SIZE=%d\n", v->str1, v->str2, v->val);
  1309.    END_STRING2_INT_LIST(v);
  1310. #endif
  1311. #undef HDL
  1312.  
  1313. /****************************************************************************/
  1314. #define HDL E_IPC_OP_FONT_FALLBACK_CLEAR
  1315. #if (TYPE == E_REMOTE_OPTIONS)
  1316.    OP("-font-fallback-clear", 0, "Clear list of fallback fonts", 0, HDL)
  1317. #elif (TYPE == E_REMOTE_OUT)
  1318.    REQ_NULL(HDL);
  1319. #elif (TYPE == E_WM_IN)
  1320.    GENERIC(HDL);
  1321.    e_font_fallback_clear();
  1322.    SAVE;
  1323.    END_GENERIC();
  1324. #elif (TYPE == E_REMOTE_IN)
  1325. #endif
  1326. #undef HDL
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333. /****************************************************************************/
  1334. #define HDL E_IPC_OP_RESTART
  1335. #if (TYPE == E_REMOTE_OPTIONS)
  1336.    OP("-restart", 0, "Restart Enlightenment", 0, HDL)
  1337. #elif (TYPE == E_REMOTE_OUT)
  1338.    REQ_NULL(HDL);
  1339. #elif (TYPE == E_WM_IN)
  1340.    GENERIC(HDL);
  1341.    restart = 1;
  1342.    ecore_main_loop_quit();
  1343.    END_GENERIC();
  1344. #elif (TYPE == E_REMOTE_IN)
  1345. #endif
  1346. #undef HDL
  1347. /****************************************************************************/
  1348. #define HDL E_IPC_OP_SHUTDOWN
  1349. #if (TYPE == E_REMOTE_OPTIONS)
  1350.    OP("-shutdown", 0, "Shutdown (exit) Enlightenment", 0, HDL)
  1351. #elif (TYPE == E_REMOTE_OUT)
  1352.    REQ_NULL(HDL);
  1353. #elif (TYPE == E_WM_IN)
  1354.    GENERIC(HDL);
  1355.    if (!e_util_immortal_check()) ecore_main_loop_quit();
  1356.    END_GENERIC();
  1357. #elif (TYPE == E_REMOTE_IN)
  1358. #endif
  1359. #undef HDL
  1360.  
  1361. /****************************************************************************/
  1362. #define HDL E_IPC_OP_LANG_LIST
  1363. #if (TYPE == E_REMOTE_OPTIONS)
  1364.    OP("-lang-list", 0, "List all available languages", 1, HDL)
  1365. #elif (TYPE == E_REMOTE_OUT)
  1366.    REQ_NULL(HDL);
  1367. #elif (TYPE == E_WM_IN)
  1368.    GENERIC(HDL);
  1369.    LIST_DATA();
  1370.    Evas_List *languages;
  1371.    languages = e_intl_language_list();
  1372.    ENCODE(languages, e_ipc_codec_str_list_enc);
  1373.    SEND_DATA(E_IPC_OP_LANG_LIST_REPLY);
  1374.    FREE_LIST(languages); 
  1375.    END_GENERIC();
  1376. #elif (TYPE == E_REMOTE_IN)
  1377. #endif
  1378. #undef HDL
  1379.      
  1380. /****************************************************************************/
  1381. #define HDL E_IPC_OP_LANG_LIST_REPLY
  1382. #if (TYPE == E_REMOTE_OPTIONS)
  1383. #elif (TYPE == E_REMOTE_OUT)
  1384. #elif (TYPE == E_WM_IN)
  1385. #elif (TYPE == E_REMOTE_IN)
  1386.    GENERIC(HDL);
  1387.    LIST();
  1388.    DECODE(e_ipc_codec_str_list_dec) {
  1389.       FOR(dat) {
  1390.      if (l->data) printf("REPLY: \"%s\"\n", (char *)(l->data));
  1391.          else printf("REPLY: \"\"\n");
  1392.       }
  1393.       FREE_LIST(dat);
  1394.    }
  1395.    END_GENERIC();
  1396. #endif
  1397. #undef HDL
  1398.  
  1399. /****************************************************************************/
  1400. #define HDL E_IPC_OP_LANG_SET
  1401. #if (TYPE == E_REMOTE_OPTIONS)
  1402.    OP("-lang-set", 1, "Set the current language to 'OPT1'", 0, HDL)
  1403. #elif (TYPE == E_REMOTE_OUT)
  1404.    REQ_STRING(params[0], HDL);
  1405. #elif (TYPE == E_WM_IN)
  1406.    STRING(s, HDL);
  1407.    /* TODO: Check if language exists */
  1408.    if (e_config->language) evas_stringshare_del(e_config->language);
  1409.    e_config->language = NULL;
  1410.    if (s) e_config->language = evas_stringshare_add(s);
  1411.    if ((e_config->language) && (e_config->language[0] != 0))
  1412.      e_intl_language_set(e_config->language);
  1413.    else
  1414.      e_intl_language_set(NULL);
  1415.    SAVE;
  1416.    END_STRING(s);
  1417. #elif (TYPE == E_REMOTE_IN)
  1418. #endif
  1419. #undef HDL
  1420.      
  1421. /****************************************************************************/
  1422. #define HDL E_IPC_OP_LANG_GET
  1423. #if (TYPE == E_REMOTE_OPTIONS)
  1424.    OP("-lang-get", 0, "Get the current language", 1, HDL)
  1425. #elif (TYPE == E_REMOTE_OUT)
  1426.    REQ_NULL(HDL);
  1427. #elif (TYPE == E_WM_IN)
  1428.    SEND_STRING(e_config->language, E_IPC_OP_LANG_GET_REPLY, HDL);
  1429. #elif (TYPE == E_REMOTE_IN)
  1430. #endif
  1431. #undef HDL
  1432.      
  1433. /****************************************************************************/
  1434. #define HDL E_IPC_OP_LANG_GET_REPLY
  1435. #if (TYPE == E_REMOTE_OPTIONS)
  1436. #elif (TYPE == E_REMOTE_OUT)
  1437. #elif (TYPE == E_WM_IN)
  1438. #elif (TYPE == E_REMOTE_IN)
  1439.    STRING(s, HDL);
  1440.    if (s) printf("REPLY: \"%s\"\n", s);
  1441.    else printf("REPLY: \"\"\n");
  1442.    END_STRING(s);
  1443. #elif (TYPE == E_LIB_IN)
  1444.    STRING(s, HDL);
  1445.    RESPONSE(r, E_Response_Language_Get);
  1446.    if (s) r->lang = strdup(s);
  1447.    END_RESPONSE(r, E_RESPONSE_LANGUAGE_GET);
  1448.    END_STRING(s);
  1449. #endif
  1450. #undef HDL
  1451.  
  1452.  
  1453.  
  1454.  
  1455. /****************************************************************************/
  1456. #define HDL E_IPC_OP_DIRS_LIST
  1457. #if (TYPE == E_REMOTE_OPTIONS)
  1458.    OP("-dirs-list", 1, "List the directory of type specified by 'OPT1', try 'themes'", 1, HDL)
  1459. #elif (TYPE == E_REMOTE_OUT)
  1460.    REQ_STRING(params[0], HDL);
  1461. #elif (TYPE == E_WM_IN)
  1462.    STRING(s, HDL);
  1463.    LIST_DATA()
  1464.    Evas_List *dir_list = NULL;
  1465.    E_PATH_GET(path, s);
  1466.    dir_list = e_path_dir_list_get(path);
  1467.      
  1468.    E_Path_Dir *p;
  1469.    if (s) {
  1470.       dat = evas_list_append(dat, strdup(s));
  1471.       FOR(dir_list) { p = l->data;
  1472.      dat = evas_list_append(dat, p->dir);
  1473.       }
  1474.    }
  1475.  
  1476.    ENCODE(dat, e_ipc_codec_str_list_enc);
  1477.    SEND_DATA(E_IPC_OP_DIRS_LIST_REPLY);
  1478.    evas_list_free(dat);
  1479.    e_path_dir_list_free(dir_list);
  1480.    END_STRING(s)
  1481. #elif (TYPE == E_REMOTE_IN)
  1482. #elif (TYPE == E_LIB_IN)
  1483. #endif
  1484. #undef HDL
  1485.  
  1486. /****************************************************************************/
  1487. #define HDL E_IPC_OP_DIRS_LIST_REPLY
  1488. #if (TYPE == E_REMOTE_OPTIONS)
  1489. #elif (TYPE == E_REMOTE_OUT)
  1490. #elif (TYPE == E_WM_IN)
  1491. #elif (TYPE == E_REMOTE_IN)
  1492.    GENERIC(HDL);
  1493.    LIST();
  1494.    DECODE(e_ipc_codec_str_list_dec) {
  1495.      FOR(dat) {
  1496.        if (dat == l)
  1497.      printf("REPLY Listing for \"%s\"\n", (char *)(l->data));
  1498.        else
  1499.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  1500.      }
  1501.      FREE_LIST(dat);
  1502.    }
  1503.    END_GENERIC();
  1504. #elif (TYPE == E_LIB_IN)
  1505.    GENERIC(HDL);
  1506.    LIST();
  1507.    DECODE(e_ipc_codec_str_list_dec) {
  1508.       int count;
  1509.       char *type;
  1510.       int res;
  1511.       RESPONSE(r, E_Response_Dirs_List);
  1512.  
  1513.       /* FIXME - this is a mess, needs to be merged into macros... */
  1514.       count = evas_list_count(dat);
  1515.       r->dirs = malloc(sizeof(char *) * count);
  1516.       r->count = count - 1; /* leave off the "type" */
  1517.  
  1518.       count = 0;
  1519.       FOR(dat) {
  1520.      if (dat == l)
  1521.        type = l->data;
  1522.      else {
  1523.        r->dirs[count] = l->data;
  1524.        count++;
  1525.      }
  1526.       }
  1527.  
  1528.       if (!strcmp(type, "data"))
  1529.     res = E_RESPONSE_DATA_DIRS_LIST;
  1530.       else if (!strcmp(type, "images"))
  1531.     res = E_RESPONSE_IMAGE_DIRS_LIST;
  1532.       else if (!strcmp(type, "fonts"))
  1533.     res = E_RESPONSE_FONT_DIRS_LIST;
  1534.       else if (!strcmp(type, "themes"))
  1535.     res = E_RESPONSE_THEME_DIRS_LIST;
  1536.       else if (!strcmp(type, "init"))
  1537.     res = E_RESPONSE_INIT_DIRS_LIST;
  1538.       else if (!strcmp(type, "icons"))
  1539.     res = E_RESPONSE_ICON_DIRS_LIST;
  1540.       else if (!strcmp(type, "modules"))
  1541.     res = E_RESPONSE_MODULE_DIRS_LIST;
  1542.       else if (!strcmp(type, "backgrounds"))
  1543.     res = E_RESPONSE_BACKGROUND_DIRS_LIST;
  1544.       END_RESPONSE_CALLBACK(r, res, _e_cb_dir_list_free);
  1545.    }
  1546.    END_GENERIC();
  1547. #endif
  1548. #undef HDL
  1549.  
  1550. /****************************************************************************/
  1551. #define HDL E_IPC_OP_DIRS_APPEND
  1552. #if (TYPE == E_REMOTE_OPTIONS)
  1553.    OP("-dirs-list-append", 2, "Append the directory of type specified by 'OPT2' to the list in 'OPT1'", 0, HDL)
  1554. #elif (TYPE == E_REMOTE_OUT)
  1555.    REQ_2STRING(params[0], params[1], HDL);
  1556. #elif (TYPE == E_WM_IN)
  1557.    STRING2(s1, s2, e_2str, HDL);
  1558.    {
  1559.       E_PATH_GET(path, s1)
  1560.       e_path_user_path_append(path, s2);
  1561.    }
  1562.    SAVE;
  1563.    END_STRING2(e_2str)
  1564. #elif (TYPE == E_REMOTE_IN)
  1565. #elif (TYPE == E_LIB_IN)
  1566. #endif
  1567. #undef HDL
  1568.  
  1569. /****************************************************************************/
  1570. #define HDL E_IPC_OP_DIRS_PREPEND
  1571. #if (TYPE == E_REMOTE_OPTIONS)
  1572.    OP("-dirs-list-prepend", 2, "Prepend the directory of type specified by 'OPT2' to the list in 'OPT1'", 0, HDL)
  1573. #elif (TYPE == E_REMOTE_OUT)
  1574.    REQ_2STRING(params[0], params[1], HDL);
  1575. #elif (TYPE == E_WM_IN)
  1576.    STRING2(s1, s2, e_2str, HDL);
  1577.    {
  1578.       E_PATH_GET(path, s1)
  1579.       e_path_user_path_prepend(path, s2);
  1580.    }
  1581.    SAVE;
  1582.    END_STRING2(e_2str)
  1583. #elif (TYPE == E_REMOTE_IN)
  1584. #elif (TYPE == E_LIB_IN)
  1585. #endif
  1586. #undef HDL
  1587.  
  1588. /****************************************************************************/
  1589. #define HDL E_IPC_OP_DIRS_REMOVE
  1590. #if (TYPE == E_REMOTE_OPTIONS)
  1591.    OP("-dirs-list-remove", 2, "Remove the directory of type specified by 'OPT2' from the list in 'OPT1'", 0, HDL)
  1592. #elif (TYPE == E_REMOTE_OUT)
  1593.    REQ_2STRING(params[0], params[1], HDL);
  1594. #elif (TYPE == E_WM_IN)
  1595.    STRING2(s1, s2, e_2str, HDL);
  1596.    {
  1597.       E_PATH_GET(path, s1)
  1598.       e_path_user_path_remove(path, s2);
  1599.    }
  1600.    SAVE;
  1601.    END_STRING2(e_2str)
  1602. #elif (TYPE == E_REMOTE_IN)
  1603. #elif (TYPE == E_LIB_IN)
  1604. #endif
  1605. #undef HDL
  1606.  
  1607. /****************************************************************************/
  1608. #define HDL E_IPC_OP_FRAMERATE_SET
  1609. #if (TYPE == E_REMOTE_OPTIONS)
  1610.    OP("-framerate-set", 1, "Set the animation framerate (fps)", 0, HDL)
  1611. #elif (TYPE == E_REMOTE_OUT)
  1612.    REQ_DOUBLE(atof(params[0]), HDL);
  1613. #elif (TYPE == E_WM_IN)
  1614.    START_DOUBLE(dbl, HDL);
  1615.    e_config->framerate = dbl;
  1616.    E_CONFIG_LIMIT(e_config->framerate, 1.0, 200.0);
  1617.    edje_frametime_set(1.0 / e_config->framerate);
  1618.    SAVE;
  1619.    END_DOUBLE;
  1620. #elif (TYPE == E_REMOTE_IN)
  1621. #endif
  1622. #undef HDL
  1623.  
  1624. /****************************************************************************/
  1625. #define HDL E_IPC_OP_FRAMERATE_GET
  1626. #if (TYPE == E_REMOTE_OPTIONS)
  1627.    OP("-framerate-get", 0, "Get the animation framerate (fps)", 1, HDL)
  1628. #elif (TYPE == E_REMOTE_OUT)
  1629.    REQ_NULL(HDL);
  1630. #elif (TYPE == E_WM_IN)
  1631.    SEND_DOUBLE(e_config->framerate, E_IPC_OP_FRAMERATE_GET_REPLY, HDL);
  1632. #elif (TYPE == E_REMOTE_IN)
  1633. #endif
  1634. #undef HDL
  1635.  
  1636. /****************************************************************************/
  1637. #define HDL E_IPC_OP_FRAMERATE_GET_REPLY
  1638. #if (TYPE == E_REMOTE_OPTIONS)
  1639. #elif (TYPE == E_REMOTE_OUT)
  1640. #elif (TYPE == E_WM_IN)
  1641. #elif (TYPE == E_REMOTE_IN)
  1642.    START_DOUBLE(fps, HDL);
  1643.    printf("REPLY: %3.3f\n", fps);
  1644.    END_DOUBLE;
  1645. #endif
  1646. #undef HDL
  1647.  
  1648.  
  1649. /****************************************************************************/
  1650. #define HDL E_IPC_OP_MENUS_SCROLL_SPEED_SET
  1651. #if (TYPE == E_REMOTE_OPTIONS)
  1652.    OP("-menus-scroll-speed-set", 1, "Set the scroll speed of menus (pixels/sec)", 0, HDL)
  1653. #elif (TYPE == E_REMOTE_OUT)
  1654.    REQ_DOUBLE(atof(params[0]), HDL);
  1655. #elif (TYPE == E_WM_IN)
  1656.    START_DOUBLE(dbl, HDL);
  1657.    e_config->menus_scroll_speed = dbl;
  1658.    E_CONFIG_LIMIT(e_config->menus_scroll_speed, 1.0, 20000.0);
  1659.    SAVE;
  1660.    END_DOUBLE;
  1661. #elif (TYPE == E_REMOTE_IN)
  1662. #endif
  1663. #undef HDL
  1664.  
  1665. /****************************************************************************/
  1666. #define HDL E_IPC_OP_MENUS_SCROLL_SPEED_GET
  1667. #if (TYPE == E_REMOTE_OPTIONS)
  1668.    OP("-menus-scroll-speed-get", 0, "Get the scroll speed of menus (pixels/sec)", 1, HDL)
  1669. #elif (TYPE == E_REMOTE_OUT)
  1670.    REQ_NULL(HDL);
  1671. #elif (TYPE == E_WM_IN)
  1672.    SEND_DOUBLE(e_config->menus_scroll_speed, E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY, HDL)
  1673. #elif (TYPE == E_REMOTE_IN)
  1674. #endif
  1675. #undef HDL
  1676.  
  1677. /****************************************************************************/
  1678. #define HDL E_IPC_OP_MENUS_SCROLL_SPEED_GET_REPLY
  1679. #if (TYPE == E_REMOTE_OPTIONS)
  1680. #elif (TYPE == E_REMOTE_OUT)
  1681. #elif (TYPE == E_WM_IN)
  1682. #elif (TYPE == E_REMOTE_IN)
  1683.    START_DOUBLE(speed, HDL);
  1684.    printf("REPLY: %3.3f\n", speed);
  1685.    END_DOUBLE;
  1686. #endif
  1687. #undef HDL
  1688.  
  1689.    
  1690. /****************************************************************************/
  1691. #define HDL E_IPC_OP_FOCUS_POLICY_SET
  1692. #if (TYPE == E_REMOTE_OPTIONS)
  1693.    OP("-focus-policy-set", 1, "Set the focus policy. OPT1 = CLICK, MOUSE or SLOPPY", 0, HDL)
  1694. #elif (TYPE == E_REMOTE_OUT)
  1695.    REQ_INT_START(HDL)
  1696.    int value = 0;
  1697.    if (!strcmp(params[0], "MOUSE")) value = E_FOCUS_MOUSE;
  1698.    else if (!strcmp(params[0], "CLICK")) value = E_FOCUS_CLICK;
  1699.    else if (!strcmp(params[0], "SLOPPY")) value = E_FOCUS_SLOPPY;
  1700.    else
  1701.      {
  1702.      printf("focus must be MOUSE, CLICK or SLOPPY\n");
  1703.      exit(-1);
  1704.      }
  1705.    REQ_INT_END(value, HDL);
  1706. #elif (TYPE == E_WM_IN)
  1707.    START_INT(value, HDL);
  1708.    e_border_button_bindings_ungrab_all();
  1709.    e_config->focus_policy = value;
  1710.    E_CONFIG_LIMIT(e_config->focus_policy, 0, 2);
  1711.    e_border_button_bindings_grab_all();
  1712.    SAVE;
  1713.    END_INT
  1714. #elif (TYPE == E_REMOTE_IN)
  1715. #endif
  1716. #undef HDL
  1717.  
  1718. /****************************************************************************/
  1719. #define HDL E_IPC_OP_FOCUS_POLICY_GET
  1720. #if (TYPE == E_REMOTE_OPTIONS)
  1721.    OP("-focus-policy-get", 0, "Get focus policy", 1, HDL)
  1722. #elif (TYPE == E_REMOTE_OUT)
  1723.    REQ_NULL(HDL);
  1724. #elif (TYPE == E_WM_IN)
  1725.    SEND_INT(e_config->focus_policy, E_IPC_OP_FOCUS_POLICY_GET_REPLY, HDL);
  1726. #elif (TYPE == E_REMOTE_IN)
  1727. #endif
  1728. #undef HDL
  1729.  
  1730. /****************************************************************************/
  1731. #define HDL E_IPC_OP_FOCUS_POLICY_GET_REPLY
  1732. #if (TYPE == E_REMOTE_OPTIONS)
  1733. #elif (TYPE == E_REMOTE_OUT)
  1734. #elif (TYPE == E_WM_IN)
  1735. #elif (TYPE == E_REMOTE_IN)
  1736.    START_INT(policy, HDL);
  1737.    if (policy == E_FOCUS_MOUSE)
  1738.      printf("REPLY: MOUSE\n");
  1739.    else if (policy == E_FOCUS_CLICK)
  1740.      printf("REPLY: CLICK\n");
  1741.    else if (policy == E_FOCUS_SLOPPY)
  1742.      printf("REPLY: SLOPPY\n");
  1743.    END_INT
  1744. #endif
  1745. #undef HDL
  1746.  
  1747. /****************************************************************************/
  1748. #define HDL E_IPC_OP_USE_EDGE_FLIP_SET
  1749. #if (TYPE == E_REMOTE_OPTIONS)
  1750.    OP("-edge-flip-set", 1, "Set the edge flip flag (0/1)", 0, HDL)
  1751. #elif (TYPE == E_REMOTE_OUT)
  1752.    REQ_INT(atoi(params[0]), HDL);
  1753. #elif (TYPE == E_WM_IN)
  1754.    START_INT(value, HDL);
  1755.    e_config->use_edge_flip = value;
  1756.    E_CONFIG_LIMIT(e_config->use_edge_flip, 0, 1);
  1757.    e_zone_update_flip_all();
  1758.    SAVE;
  1759.    END_INT;
  1760. #elif (TYPE == E_REMOTE_IN)
  1761. #endif
  1762. #undef HDL
  1763.  
  1764. /****************************************************************************/
  1765. #define HDL E_IPC_OP_USE_EDGE_FLIP_GET
  1766. #if (TYPE == E_REMOTE_OPTIONS)
  1767.    OP("-edge-flip-get", 0, "Get the edge flip flag", 1, HDL)
  1768. #elif (TYPE == E_REMOTE_OUT)
  1769.    REQ_NULL(HDL)
  1770. #elif (TYPE == E_WM_IN)
  1771.    SEND_INT(e_config->use_edge_flip, E_IPC_OP_USE_EDGE_FLIP_GET_REPLY, HDL);
  1772. #elif (TYPE == E_REMOTE_IN)
  1773. #endif
  1774. #undef HDL
  1775.  
  1776. /****************************************************************************/
  1777. #define HDL E_IPC_OP_USE_EDGE_FLIP_GET_REPLY
  1778. #if (TYPE == E_REMOTE_OPTIONS)
  1779. #elif (TYPE == E_REMOTE_OUT)
  1780. #elif (TYPE == E_WM_IN)
  1781. #elif (TYPE == E_REMOTE_IN)
  1782.    START_INT(val, HDL)
  1783.    printf("REPLY: %i\n", val);
  1784.    END_INT;
  1785. #endif
  1786. #undef HDL
  1787.  
  1788. /****************************************************************************/
  1789. #define HDL E_IPC_OP_EDGE_FLIP_TIMEOUT_SET
  1790. #if (TYPE == E_REMOTE_OPTIONS)
  1791.    OP("-edge-flip-timeout-set", 1, "Set the edge flip timeout (sec)", 0, HDL)
  1792. #elif (TYPE == E_REMOTE_OUT)
  1793.    REQ_DOUBLE(atof(params[0]), HDL)
  1794. #elif (TYPE == E_WM_IN)
  1795.    START_DOUBLE(dbl, HDL);
  1796.    e_config->edge_flip_timeout = dbl;
  1797.    E_CONFIG_LIMIT(e_config->edge_flip_timeout, 0.0, 2.0);
  1798.    SAVE;
  1799.    END_DOUBLE;
  1800. #elif (TYPE == E_REMOTE_IN)
  1801. #endif
  1802. #undef HDL
  1803.  
  1804. /****************************************************************************/
  1805. #define HDL E_IPC_OP_EDGE_FLIP_TIMEOUT_GET
  1806. #if (TYPE == E_REMOTE_OPTIONS)
  1807.    OP("-edge-flip-timeout-get", 0, "Get the edge flip timeout", 1, HDL)
  1808. #elif (TYPE == E_REMOTE_OUT)
  1809.    REQ_NULL(HDL)
  1810. #elif (TYPE == E_WM_IN)
  1811.    SEND_DOUBLE(e_config->edge_flip_timeout, E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY, HDL);
  1812. #elif (TYPE == E_REMOTE_IN)
  1813. #endif
  1814. #undef HDL
  1815.  
  1816. /****************************************************************************/
  1817. #define HDL E_IPC_OP_EDGE_FLIP_TIMEOUT_GET_REPLY
  1818. #if (TYPE == E_REMOTE_OPTIONS)
  1819. #elif (TYPE == E_REMOTE_OUT)
  1820. #elif (TYPE == E_WM_IN)
  1821. #elif (TYPE == E_REMOTE_IN)
  1822.    START_DOUBLE(val, HDL)
  1823.    printf("REPLY: %3.3f\n", val);
  1824.    END_DOUBLE;
  1825. #endif
  1826. #undef HDL
  1827.  
  1828. /****************************************************************************/
  1829. #define HDL E_IPC_OP_FONT_CACHE_SET
  1830. #if (TYPE == E_REMOTE_OPTIONS)
  1831.    OP("-font-cache-set", 1, "Set the font cache size (Kb)", 0, HDL)
  1832. #elif (TYPE == E_REMOTE_OUT)
  1833.    REQ_INT(atoi(params[0]), HDL)
  1834. #elif (TYPE == E_WM_IN)
  1835.    START_INT(val, HDL);
  1836.    e_config->font_cache = val;
  1837.    E_CONFIG_LIMIT(e_config->font_cache, 0, 32 * 1024);
  1838.    e_canvas_recache();
  1839.    SAVE;
  1840.    END_INT;
  1841. #elif (TYPE == E_REMOTE_IN)
  1842. #endif
  1843. #undef HDL
  1844.  
  1845. /****************************************************************************/
  1846. #define HDL E_IPC_OP_FONT_CACHE_GET
  1847. #if (TYPE == E_REMOTE_OPTIONS)
  1848.    OP("-font-cache-get", 0, "Get the speculative font cache size (Kb)", 1, HDL)
  1849. #elif (TYPE == E_REMOTE_OUT)
  1850.    REQ_NULL(HDL)
  1851. #elif (TYPE == E_WM_IN)
  1852.    SEND_INT(e_config->font_cache, E_IPC_OP_FONT_CACHE_GET_REPLY, HDL);
  1853. #elif (TYPE == E_REMOTE_IN)
  1854. #endif
  1855. #undef HDL
  1856.  
  1857. /****************************************************************************/
  1858. #define HDL E_IPC_OP_FONT_CACHE_GET_REPLY
  1859. #if (TYPE == E_REMOTE_OPTIONS)
  1860. #elif (TYPE == E_REMOTE_OUT)
  1861. #elif (TYPE == E_WM_IN)
  1862. #elif (TYPE == E_REMOTE_IN)
  1863.    START_INT(val, HDL)
  1864.    printf("REPLY: %i\n", val);
  1865.    END_INT;
  1866. #endif
  1867. #undef HDL
  1868.  
  1869. /****************************************************************************/
  1870. #define HDL E_IPC_OP_IMAGE_CACHE_SET
  1871. #if (TYPE == E_REMOTE_OPTIONS)
  1872.    OP("-image-cache-set", 1, "Set the image cache size (Kb)", 0, HDL)
  1873. #elif (TYPE == E_REMOTE_OUT)
  1874.    REQ_INT(atoi(params[0]), HDL)
  1875. #elif (TYPE == E_WM_IN)
  1876.    START_INT(val, HDL);
  1877.    e_config->image_cache = val;
  1878.    E_CONFIG_LIMIT(e_config->image_cache, 0, 256 * 1024);
  1879.    e_canvas_recache();
  1880.    SAVE;
  1881.    END_INT;
  1882. #elif (TYPE == E_REMOTE_IN)
  1883. #endif
  1884. #undef HDL
  1885.  
  1886. /****************************************************************************/
  1887. #define HDL E_IPC_OP_IMAGE_CACHE_GET
  1888. #if (TYPE == E_REMOTE_OPTIONS)
  1889.    OP("-image-cache-get", 0, "Get the speculative image cache size (Kb)", 1, HDL)
  1890. #elif (TYPE == E_REMOTE_OUT)
  1891.    REQ_NULL(HDL)
  1892. #elif (TYPE == E_WM_IN)
  1893.    SEND_INT(e_config->image_cache, E_IPC_OP_IMAGE_CACHE_GET_REPLY, HDL);
  1894. #elif (TYPE == E_REMOTE_IN)
  1895. #endif
  1896. #undef HDL
  1897.  
  1898. /****************************************************************************/
  1899. #define HDL E_IPC_OP_IMAGE_CACHE_GET_REPLY
  1900. #if (TYPE == E_REMOTE_OPTIONS)
  1901. #elif (TYPE == E_REMOTE_OUT)
  1902. #elif (TYPE == E_WM_IN)
  1903. #elif (TYPE == E_REMOTE_IN)
  1904.    START_INT(val, HDL)
  1905.    printf("REPLY: %i\n", val);
  1906.    END_INT;
  1907. #endif
  1908. #undef HDL
  1909.  
  1910. /****************************************************************************/
  1911. #define HDL E_IPC_OP_EDJE_CACHE_SET
  1912. #if (TYPE == E_REMOTE_OPTIONS)
  1913.    OP("-edje-cache-set", 1, "Set the edje cache size (items)", 0, HDL)
  1914. #elif (TYPE == E_REMOTE_OUT)
  1915.    REQ_INT(atoi(params[0]), HDL)
  1916. #elif (TYPE == E_WM_IN)
  1917.    START_INT(val, HDL);
  1918.    e_config->edje_cache = val;
  1919.    E_CONFIG_LIMIT(e_config->edje_cache, 0, 256);
  1920.    e_canvas_recache();
  1921.    SAVE;
  1922.    END_INT;
  1923. #elif (TYPE == E_REMOTE_IN)
  1924. #endif
  1925. #undef HDL
  1926.  
  1927. /****************************************************************************/
  1928. #define HDL E_IPC_OP_EDJE_CACHE_GET
  1929. #if (TYPE == E_REMOTE_OPTIONS)
  1930.    OP("-edje-cache-get", 0, "Get the speculative edje cache size (items)", 1, HDL)
  1931. #elif (TYPE == E_REMOTE_OUT)
  1932.    REQ_NULL(HDL)
  1933. #elif (TYPE == E_WM_IN)
  1934.    SEND_INT(e_config->edje_cache, E_IPC_OP_EDJE_CACHE_GET_REPLY, HDL);
  1935. #elif (TYPE == E_REMOTE_IN)
  1936. #endif
  1937. #undef HDL
  1938.  
  1939. /****************************************************************************/
  1940. #define HDL E_IPC_OP_EDJE_CACHE_GET_REPLY
  1941. #if (TYPE == E_REMOTE_OPTIONS)
  1942. #elif (TYPE == E_REMOTE_OUT)
  1943. #elif (TYPE == E_WM_IN)
  1944. #elif (TYPE == E_REMOTE_IN)
  1945.    START_INT(val, HDL)
  1946.    printf("REPLY: %i\n", val);
  1947.    END_INT;
  1948. #endif
  1949. #undef HDL
  1950.  
  1951. /****************************************************************************/
  1952. #define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_SET
  1953. #if (TYPE == E_REMOTE_OPTIONS)
  1954.    OP("-edje-collection-cache-set", 1, "Set the edje collection cache size (items)", 0, HDL)
  1955. #elif (TYPE == E_REMOTE_OUT)
  1956.    REQ_INT(atoi(params[0]), HDL)
  1957. #elif (TYPE == E_WM_IN)
  1958.    START_INT(val, HDL);
  1959.    e_config->edje_collection_cache = val;
  1960.    E_CONFIG_LIMIT(e_config->edje_collection_cache, 0, 512);
  1961.    e_canvas_recache();
  1962.    SAVE;
  1963.    END_INT;
  1964. #elif (TYPE == E_REMOTE_IN)
  1965. #endif
  1966. #undef HDL
  1967.  
  1968. /****************************************************************************/
  1969. #define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_GET
  1970. #if (TYPE == E_REMOTE_OPTIONS)
  1971.    OP("-edje-collection-cache-get", 0, "Get the speculative edje collection cache size (items)", 1, HDL)
  1972. #elif (TYPE == E_REMOTE_OUT)
  1973.    REQ_NULL(HDL)
  1974. #elif (TYPE == E_WM_IN)
  1975.    SEND_INT(e_config->edje_collection_cache, E_IPC_OP_EDJE_COLLECTION_CACHE_GET_REPLY, HDL);
  1976. #elif (TYPE == E_REMOTE_IN)
  1977. #endif
  1978. #undef HDL
  1979.  
  1980. /****************************************************************************/
  1981. #define HDL E_IPC_OP_EDJE_COLLECTION_CACHE_GET_REPLY
  1982. #if (TYPE == E_REMOTE_OPTIONS)
  1983. #elif (TYPE == E_REMOTE_OUT)
  1984. #elif (TYPE == E_WM_IN)
  1985. #elif (TYPE == E_REMOTE_IN)
  1986.    START_INT(val, HDL)
  1987.    printf("REPLY: %i\n", val);
  1988.    END_INT;
  1989. #endif
  1990. #undef HDL
  1991.  
  1992. /****************************************************************************/
  1993. #define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_SET
  1994. #if (TYPE == E_REMOTE_OPTIONS)
  1995.    OP("-cache-flush-interval-set", 1, "Set the cache flush interval (sec) (0.0 = off)", 0, HDL)
  1996. #elif (TYPE == E_REMOTE_OUT)
  1997.    REQ_DOUBLE(atof(params[0]), HDL);
  1998. #elif (TYPE == E_WM_IN)
  1999.    START_DOUBLE(dbl, HDL);
  2000.    e_config->cache_flush_interval = dbl;
  2001.    E_CONFIG_LIMIT(e_config->cache_flush_interval, 0.0, 600.0);
  2002.    e_canvas_recache();
  2003.    SAVE;
  2004.    END_DOUBLE;
  2005. #elif (TYPE == E_REMOTE_IN)
  2006. #endif
  2007. #undef HDL
  2008.  
  2009. /****************************************************************************/
  2010. #define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET
  2011. #if (TYPE == E_REMOTE_OPTIONS)
  2012.    OP("-cache-flush-interval-get", 0, "Get the interval between cache flushed (sec)", 1, HDL)
  2013. #elif (TYPE == E_REMOTE_OUT)
  2014.    REQ_NULL(HDL);
  2015. #elif (TYPE == E_WM_IN)
  2016.    SEND_DOUBLE(e_config->cache_flush_interval, E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY, HDL);
  2017. #elif (TYPE == E_REMOTE_IN)
  2018. #endif
  2019. #undef HDL
  2020.  
  2021. /****************************************************************************/
  2022. #define HDL E_IPC_OP_CACHE_FLUSH_INTERVAL_GET_REPLY
  2023. #if (TYPE == E_REMOTE_OPTIONS)
  2024. #elif (TYPE == E_REMOTE_OUT)
  2025. #elif (TYPE == E_WM_IN)
  2026. #elif (TYPE == E_REMOTE_IN)
  2027.    START_DOUBLE(fint, HDL);
  2028.    printf("REPLY: %3.3f\n", fint);
  2029.    END_DOUBLE;
  2030. #endif
  2031. #undef HDL
  2032.  
  2033. /****************************************************************************/
  2034. #define HDL E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_SET
  2035. #if (TYPE == E_REMOTE_OPTIONS)
  2036.    OP("-menus-fast-move-threshold-set", 1, "Set the mouse speed (pixels/second) that is considered a 'fast move'", 0, HDL)
  2037. #elif (TYPE == E_REMOTE_OUT)
  2038.    REQ_DOUBLE(atof(params[0]), HDL);
  2039. #elif (TYPE == E_WM_IN)
  2040.    START_DOUBLE(val, HDL);
  2041.    e_config->menus_fast_mouse_move_threshhold = val;
  2042.    E_CONFIG_LIMIT(e_config->menus_fast_mouse_move_threshhold, 1.0, 2000.0);
  2043.    SAVE;
  2044.    END_DOUBLE;
  2045. #elif (TYPE == E_REMOTE_IN)
  2046. #endif
  2047. #undef HDL
  2048.  
  2049. /****************************************************************************/
  2050. #define HDL E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_GET
  2051. #if (TYPE == E_REMOTE_OPTIONS)
  2052.    OP("-menus-fast-move-threshold-get", 0, "Get the mouse speed (pixels/second) that is considered a 'fast move'", 1, HDL)
  2053. #elif (TYPE == E_REMOTE_OUT)
  2054.    REQ_NULL(HDL);
  2055. #elif (TYPE == E_WM_IN)
  2056.    SEND_DOUBLE(e_config->menus_fast_mouse_move_threshhold, E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_GET_REPLY, HDL);
  2057. #elif (TYPE == E_REMOTE_IN)
  2058. #endif
  2059. #undef HDL
  2060.  
  2061. /****************************************************************************/
  2062. #define HDL E_IPC_OP_MENUS_FAST_MOVE_THRESHOLD_GET_REPLY
  2063. #if (TYPE == E_REMOTE_OPTIONS)
  2064. #elif (TYPE == E_REMOTE_OUT)
  2065. #elif (TYPE == E_WM_IN)
  2066. #elif (TYPE == E_REMOTE_IN)
  2067.    START_DOUBLE(val, HDL)
  2068.    printf("REPLY: %3.3f\n", val);
  2069.    END_DOUBLE;
  2070. #endif
  2071. #undef HDL
  2072.  
  2073. /****************************************************************************/
  2074. #define HDL E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_SET
  2075. #if (TYPE == E_REMOTE_OPTIONS)
  2076.    OP("-menus-click-drag-timeout-set", 1, "Set the time (in sec) between a mouse press and release that will keep the menu up anyway", 0, HDL)
  2077. #elif (TYPE == E_REMOTE_OUT)
  2078.    REQ_DOUBLE(atof(params[0]), HDL);
  2079. #elif (TYPE == E_WM_IN)
  2080.    START_DOUBLE(val, HDL);
  2081.    e_config->menus_click_drag_timeout = val;
  2082.    E_CONFIG_LIMIT(e_config->menus_click_drag_timeout, 0.0, 10.0);
  2083.    SAVE;
  2084.    END_DOUBLE;
  2085. #elif (TYPE == E_REMOTE_IN)
  2086. #endif
  2087. #undef HDL
  2088.  
  2089. /****************************************************************************/
  2090. #define HDL E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET
  2091. #if (TYPE == E_REMOTE_OPTIONS)
  2092.    OP("-menus-click-drag-timeout-get", 0, "Get the time (in sec) between a mouse press and release that will keep the menu up anyway", 1, HDL)
  2093. #elif (TYPE == E_REMOTE_OUT)
  2094.    REQ_NULL(HDL)
  2095. #elif (TYPE == E_WM_IN)
  2096.    SEND_DOUBLE(e_config->menus_click_drag_timeout, E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY, HDL);
  2097. #elif (TYPE == E_REMOTE_IN)
  2098. #endif
  2099. #undef HDL
  2100.  
  2101. /****************************************************************************/
  2102. #define HDL E_IPC_OP_MENUS_CLICK_DRAG_TIMEOUT_GET_REPLY
  2103. #if (TYPE == E_REMOTE_OPTIONS)
  2104. #elif (TYPE == E_REMOTE_OUT)
  2105. #elif (TYPE == E_WM_IN)
  2106. #elif (TYPE == E_REMOTE_IN)
  2107.    START_DOUBLE(val, HDL)
  2108.    printf("REPLY: %3.3f\n", val);
  2109.    END_DOUBLE;
  2110. #endif
  2111. #undef HDL
  2112.  
  2113. /****************************************************************************/
  2114. #define HDL E_IPC_OP_BORDER_SHADE_ANIMATE_SET
  2115. #if (TYPE == E_REMOTE_OPTIONS)
  2116.    OP("-border-shade-animate-set", 1, "Set the shading animation flag (0/1)", 0, HDL)
  2117. #elif (TYPE == E_REMOTE_OUT)
  2118.    REQ_INT(atoi(params[0]), HDL);
  2119. #elif (TYPE == E_WM_IN)
  2120.    START_INT(val, HDL);
  2121.    e_config->border_shade_animate = val;
  2122.    E_CONFIG_LIMIT(e_config->border_shade_animate, 0, 1);
  2123.    SAVE;
  2124.    END_INT;
  2125. #elif (TYPE == E_REMOTE_IN)
  2126. #endif
  2127. #undef HDL
  2128.  
  2129. /****************************************************************************/
  2130. #define HDL E_IPC_OP_BORDER_SHADE_ANIMATE_GET
  2131. #if (TYPE == E_REMOTE_OPTIONS)
  2132.    OP("-border-shade-animate-get", 0, "Get the shading animation flag (0/1)", 1, HDL)
  2133. #elif (TYPE == E_REMOTE_OUT)
  2134.    REQ_NULL(HDL)
  2135. #elif (TYPE == E_WM_IN)
  2136.    SEND_INT(e_config->border_shade_animate, E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY, HDL);
  2137. #elif (TYPE == E_REMOTE_IN)
  2138. #endif
  2139. #undef HDL
  2140.  
  2141. /****************************************************************************/
  2142. #define HDL E_IPC_OP_BORDER_SHADE_ANIMATE_GET_REPLY
  2143. #if (TYPE == E_REMOTE_OPTIONS)
  2144. #elif (TYPE == E_REMOTE_OUT)
  2145. #elif (TYPE == E_WM_IN)
  2146. #elif (TYPE == E_REMOTE_IN)
  2147.    START_INT(val, HDL)
  2148.    printf("REPLY: %i\n", val);
  2149.    END_INT;
  2150. #endif
  2151. #undef HDL
  2152.  
  2153.    /****************************************************************************/
  2154. #define HDL E_IPC_OP_BORDER_SHADE_TRANSITION_SET
  2155. #if (TYPE == E_REMOTE_OPTIONS)
  2156.    OP("-border-shade-transition-set", 1, "Set the shading animation algorithm (0, 1, 2 or 3)", 0, HDL)
  2157. #elif (TYPE == E_REMOTE_OUT)
  2158.       REQ_INT(atoi(params[0]), HDL);
  2159. #elif (TYPE == E_WM_IN)
  2160.    START_INT(val, HDL);
  2161.    e_config->border_shade_transition = val;
  2162.    E_CONFIG_LIMIT(e_config->border_shade_transition, 0, 3);
  2163.    SAVE;
  2164.    END_INT;
  2165. #elif (TYPE == E_REMOTE_IN)
  2166. #endif
  2167. #undef HDL
  2168.  
  2169. /****************************************************************************/
  2170. #define HDL E_IPC_OP_BORDER_SHADE_TRANSITION_GET
  2171. #if (TYPE == E_REMOTE_OPTIONS)
  2172.    OP("-border-shade-transition-get", 0, "Get the shading animation algorithm (0, 1, 2 or 3)", 1, HDL)
  2173. #elif (TYPE == E_REMOTE_OUT)
  2174.    REQ_NULL(HDL)
  2175. #elif (TYPE == E_WM_IN)
  2176.    SEND_INT(e_config->border_shade_transition, E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY, HDL);
  2177. #elif (TYPE == E_REMOTE_IN)
  2178. #endif
  2179. #undef HDL
  2180.  
  2181. /****************************************************************************/
  2182. #define HDL E_IPC_OP_BORDER_SHADE_TRANSITION_GET_REPLY
  2183. #if (TYPE == E_REMOTE_OPTIONS)
  2184. #elif (TYPE == E_REMOTE_OUT)
  2185. #elif (TYPE == E_WM_IN)
  2186. #elif (TYPE == E_REMOTE_IN)
  2187.    START_INT(val, HDL)
  2188.    printf("REPLY: %i\n", val);
  2189.    END_INT;
  2190. #endif
  2191. #undef HDL
  2192.  
  2193. /****************************************************************************/
  2194. #define HDL E_IPC_OP_BORDER_SHADE_SPEED_SET
  2195. #if (TYPE == E_REMOTE_OPTIONS)
  2196.    OP("-border-shade-speed-set", 1, "Set the shading speed (pixels/sec)", 0, HDL)
  2197. #elif (TYPE == E_REMOTE_OUT)
  2198.       REQ_DOUBLE(atof(params[0]), HDL);
  2199. #elif (TYPE == E_WM_IN)
  2200.    START_DOUBLE(val, HDL);
  2201.    e_config->border_shade_speed = val;
  2202.    E_CONFIG_LIMIT(e_config->border_shade_speed, 1.0, 20000.0);
  2203.    SAVE;
  2204.    END_DOUBLE;
  2205. #elif (TYPE == E_REMOTE_IN)
  2206. #endif
  2207. #undef HDL
  2208.  
  2209. /****************************************************************************/
  2210. #define HDL E_IPC_OP_BORDER_SHADE_SPEED_GET
  2211. #if (TYPE == E_REMOTE_OPTIONS)
  2212.    OP("-border-shade-speed-get", 0, "Get the shading speed (pixels/sec)", 1, HDL)
  2213. #elif (TYPE == E_REMOTE_OUT)
  2214.    REQ_NULL(HDL)
  2215. #elif (TYPE == E_WM_IN)
  2216.    SEND_DOUBLE(e_config->border_shade_speed, E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY, HDL);
  2217. #elif (TYPE == E_REMOTE_IN)
  2218. #endif
  2219. #undef HDL
  2220.  
  2221. /****************************************************************************/
  2222. #define HDL E_IPC_OP_BORDER_SHADE_SPEED_GET_REPLY
  2223. #if (TYPE == E_REMOTE_OPTIONS)
  2224. #elif (TYPE == E_REMOTE_OUT)
  2225. #elif (TYPE == E_WM_IN)
  2226. #elif (TYPE == E_REMOTE_IN)
  2227.    START_DOUBLE(val, HDL)
  2228.    printf("REPLY: %3.3f\n", val);
  2229.    END_DOUBLE;
  2230. #endif
  2231. #undef HDL
  2232.  
  2233. /****************************************************************************/
  2234. #define HDL E_IPC_OP_DESKS_SET
  2235. #if (TYPE == E_REMOTE_OPTIONS)
  2236.    OP("-desks-set", 2, "Set the number of virtual desktops (X x Y desks OPT1 = X, OPT2 = Y)", 0, HDL)
  2237. #elif (TYPE == E_REMOTE_OUT)
  2238.    REQ_2INT(atoi(params[0]), atoi(params[1]), HDL);
  2239. #elif (TYPE == E_WM_IN)
  2240.    START_2INT(val1, val2, HDL);
  2241.    e_config->zone_desks_x_count = val1;
  2242.    e_config->zone_desks_y_count = val2;
  2243.    E_CONFIG_LIMIT(e_config->zone_desks_x_count, 1, 64)
  2244.    E_CONFIG_LIMIT(e_config->zone_desks_y_count, 1, 64)
  2245.    {
  2246.       Evas_List *l;
  2247.       for (l = e_manager_list(); l; l = l->next)
  2248.     {
  2249.        E_Manager *man;
  2250.        Evas_List *l2;
  2251.        man = l->data;
  2252.        for (l2 = man->containers; l2; l2 = l2->next)
  2253.          {
  2254.         E_Container *con;
  2255.         Evas_List *l3;
  2256.         con = l2->data;
  2257.         for (l3 = con->zones; l3; l3 = l3->next)
  2258.           {
  2259.              E_Zone *zone;
  2260.              zone = l3->data;
  2261.              e_zone_desk_count_set(zone, 
  2262.                        e_config->zone_desks_x_count, 
  2263.                        e_config->zone_desks_y_count);
  2264.           }
  2265.          }
  2266.     }
  2267.    }
  2268.    SAVE;
  2269.    END_2INT;
  2270. #elif (TYPE == E_REMOTE_IN)
  2271. #endif
  2272. #undef HDL
  2273.  
  2274. /****************************************************************************/
  2275. #define HDL E_IPC_OP_DESKS_GET
  2276. #if (TYPE == E_REMOTE_OPTIONS)
  2277.    OP("-desks-get", 0, "Get the number of virtual desktops", 1, HDL)
  2278. #elif (TYPE == E_REMOTE_OUT)
  2279.    REQ_NULL(HDL)
  2280. #elif (TYPE == E_WM_IN)
  2281.    SEND_2INT(e_config->zone_desks_x_count, e_config->zone_desks_y_count, E_IPC_OP_DESKS_GET_REPLY, HDL);
  2282. #elif (TYPE == E_REMOTE_IN)
  2283. #endif
  2284. #undef HDL
  2285.  
  2286. /****************************************************************************/
  2287. #define HDL E_IPC_OP_DESKS_GET_REPLY
  2288. #if (TYPE == E_REMOTE_OPTIONS)
  2289. #elif (TYPE == E_REMOTE_OUT)
  2290. #elif (TYPE == E_WM_IN)
  2291. #elif (TYPE == E_REMOTE_IN)
  2292.    START_2INT(val1, val2, HDL)
  2293.    printf("REPLY: %i %i\n", val1, val2);
  2294.    END_2INT;
  2295. #endif
  2296. #undef HDL
  2297.  
  2298. /****************************************************************************/
  2299. #define HDL E_IPC_OP_MAXIMIZE_POLICY_SET
  2300. #if (TYPE == E_REMOTE_OPTIONS)
  2301.    OP("-maximize-policy-set", 1, "Set the maximize policy. OPT1 = FULLSCREEN, SMART, EXPAND or FILL", 0, HDL)
  2302. #elif (TYPE == E_REMOTE_OUT)
  2303.    REQ_INT_START(HDL)
  2304.    int value = 0;
  2305.    if (!strcmp(params[0], "FULLSCREEN")) value = E_MAXIMIZE_FULLSCREEN;
  2306.    else if (!strcmp(params[0], "SMART")) value = E_MAXIMIZE_SMART;
  2307.    else if (!strcmp(params[0], "EXPAND")) value = E_MAXIMIZE_EXPAND;
  2308.    else if (!strcmp(params[0], "FILL")) value = E_MAXIMIZE_FILL;
  2309.    else
  2310.      {
  2311.      printf("maximize must be FULLSCREEN, SMART, EXPAND or FILL\n");
  2312.      exit(-1);
  2313.      }
  2314.    REQ_INT_END(value, HDL);
  2315. #elif (TYPE == E_WM_IN)
  2316.    START_INT(value, HDL);
  2317.    e_config->maximize_policy = value;
  2318.    E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, E_MAXIMIZE_FILL);
  2319.    SAVE;
  2320.    END_INT
  2321. #elif (TYPE == E_REMOTE_IN)
  2322. #endif
  2323. #undef HDL
  2324.  
  2325. /****************************************************************************/
  2326. #define HDL E_IPC_OP_MAXIMIZE_POLICY_GET
  2327. #if (TYPE == E_REMOTE_OPTIONS)
  2328.    OP("-maximize-policy-get", 0, "Get maximize policy", 1, HDL)
  2329. #elif (TYPE == E_REMOTE_OUT)
  2330.    REQ_NULL(HDL);
  2331. #elif (TYPE == E_WM_IN)
  2332.    SEND_INT(e_config->maximize_policy, E_IPC_OP_MAXIMIZE_POLICY_GET_REPLY, HDL);
  2333. #elif (TYPE == E_REMOTE_IN)
  2334. #endif
  2335. #undef HDL
  2336.  
  2337. /****************************************************************************/
  2338. #define HDL E_IPC_OP_MAXIMIZE_POLICY_GET_REPLY
  2339. #if (TYPE == E_REMOTE_OPTIONS)
  2340. #elif (TYPE == E_REMOTE_OUT)
  2341. #elif (TYPE == E_WM_IN)
  2342. #elif (TYPE == E_REMOTE_IN)
  2343.    START_INT(policy, HDL);
  2344.    if (policy == E_MAXIMIZE_FULLSCREEN)
  2345.      printf("REPLY: FULLSCREEN\n");
  2346.    else if (policy == E_MAXIMIZE_SMART)
  2347.      printf("REPLY: SMART\n");
  2348.    else if (policy == E_MAXIMIZE_EXPAND)
  2349.      printf("REPLY: EXPAND\n");
  2350.    else if (policy == E_MAXIMIZE_FILL)
  2351.      printf("REPLY: FILL\n");
  2352.    END_INT
  2353. #endif
  2354. #undef HDL
  2355.  
  2356. /****************************************************************************/
  2357.  
  2358. #define HDL E_IPC_OP_BINDING_MOUSE_LIST 
  2359. #if (TYPE == E_REMOTE_OPTIONS)
  2360.    /* e_remote define command line args */
  2361.    OP("-binding-mouse-list", 0, "List all mouse bindings", 1, HDL)
  2362. #elif (TYPE == E_REMOTE_OUT)
  2363.    /* e_remote parse command line args encode and send request */
  2364.    REQ_NULL(HDL);
  2365. #elif (TYPE == E_WM_IN)
  2366.    /* e_ipc decode request and do action or send reply */
  2367.    SEND_INT4_STRING2_LIST(e_config->mouse_bindings, E_Config_Binding_Mouse, emb, v, HDL);
  2368.    v->val1 = emb->context;
  2369.    v->val2 = emb->modifiers;
  2370.    v->str1 = emb->action;
  2371.    v->str2 = emb->params;
  2372.    v->val3 = emb->button;
  2373.    v->val4 = emb->any_mod;
  2374.    END_SEND_INT4_STRING2_LIST(v, E_IPC_OP_BINDING_MOUSE_LIST_REPLY);
  2375. #endif
  2376. #undef HDL
  2377.  
  2378. /****************************************************************************/
  2379.  
  2380. #define HDL E_IPC_OP_BINDING_MOUSE_LIST_REPLY
  2381. #if (TYPE == E_REMOTE_OPTIONS)
  2382. #elif (TYPE == E_REMOTE_OUT)
  2383. #elif (TYPE == E_WM_IN)
  2384. #elif (TYPE == E_REMOTE_IN)
  2385.    /* e_remote decode the response from e_ipc and print it to the console */
  2386.    INT4_STRING2_LIST(v, HDL);
  2387.    {
  2388.       char *context;
  2389.       char modifier[256];
  2390.       char *s1, *s2;
  2391.       
  2392.       if (v->val1 == E_BINDING_CONTEXT_NONE) context = "NONE";
  2393.       else if (v->val1 == E_BINDING_CONTEXT_UNKNOWN) context = "UNKNOWN";
  2394.       else if (v->val1 == E_BINDING_CONTEXT_BORDER) context = "BORDER";
  2395.       else if (v->val1 == E_BINDING_CONTEXT_ZONE) context = "ZONE";
  2396.       else if (v->val1 == E_BINDING_CONTEXT_CONTAINER) context = "CONTAINER";
  2397.       else if (v->val1 == E_BINDING_CONTEXT_MANAGER) context = "MANAGER";
  2398.       else if (v->val1 == E_BINDING_CONTEXT_MENU) context = "MENU";
  2399.       else if (v->val1 == E_BINDING_CONTEXT_WINLIST) context = "WINLIST";
  2400.       else if (v->val1 == E_BINDING_CONTEXT_POPUP) context = "POPUP";
  2401.       else if (v->val1 == E_BINDING_CONTEXT_ANY) context = "ANY";
  2402.       else context = "";
  2403.  
  2404.       modifier[0] = 0;
  2405.       if (v->val2 & E_BINDING_MODIFIER_SHIFT)
  2406.       {
  2407.         if (modifier[0] != 0) strcat(modifier, "|");
  2408.         strcat(modifier, "SHIFT");
  2409.       }
  2410.       if (v->val2 & E_BINDING_MODIFIER_CTRL)
  2411.       {
  2412.         if (modifier[0] != 0) strcat(modifier, "|");
  2413.         strcat(modifier, "CTRL");
  2414.       }
  2415.       if (v->val2 & E_BINDING_MODIFIER_ALT)
  2416.       {
  2417.         if (modifier[0] != 0) strcat(modifier, "|");
  2418.         strcat(modifier, "ALT");
  2419.       }
  2420.       if (v->val2 & E_BINDING_MODIFIER_WIN)
  2421.       {
  2422.         if (modifier[0] != 0) strcat(modifier, "|");
  2423.         strcat(modifier, "WIN");
  2424.       }
  2425.       if (v->val2 == E_BINDING_MODIFIER_NONE)
  2426.          strcpy(modifier, "NONE");
  2427.  
  2428.       s1 = v->str1;
  2429.       s2 = v->str2;
  2430.       if (!s1) s1 = "";
  2431.       if (!s2) s2 = "";
  2432.       printf("REPLY: BINDING CONTEXT=%s BUTTON=%i MODIFIERS=%s ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n",
  2433.         context,
  2434.                 v->val3,
  2435.         modifier,
  2436.                 v->val4,
  2437.                 s1,
  2438.                 s2
  2439.         );
  2440.    }
  2441.    END_INT4_STRING2_LIST(v);
  2442. #elif E_LIB_IN
  2443.    INT4_STRING2_LIST_START(v, HDL);
  2444.    {
  2445.       int count;
  2446.       RESPONSE(r, E_Response_Binding_Mouse_List);
  2447.       count = evas_list_count(dat);
  2448.       r->bindings = malloc(sizeof(E_Response_Binding_Mouse_Data *) * count);
  2449.       r->count = count;
  2450.  
  2451.       count = 0;
  2452.       INT4_STRING2_LIST_ITERATE(v);
  2453.       {
  2454.      E_Response_Binding_Mouse_Data *d;
  2455.  
  2456.      d = malloc(sizeof(E_Response_Binding_Mouse_Data));
  2457.      d->ctx = v->val1;
  2458.      d->button = v->val3;
  2459.      d->mod = v->val2;
  2460.      d->any_mod = v->val4;
  2461.      d->action = ((v->str1) ? evas_stringshare_add(v->str1) : NULL);
  2462.      d->params = ((v->str2) ? evas_stringshare_add(v->str2) : NULL);
  2463.  
  2464.      r->bindings[count] = d;
  2465.      count++;
  2466.       }
  2467.       END_INT4_STRING2_LIST_ITERATE(v);
  2468.       /* this will leak, need to free the event data */
  2469.       END_RESPONSE(r, E_RESPONSE_BINDING_MOUSE_LIST);
  2470.    }
  2471.    END_INT4_STRING2_LIST_START();
  2472. #endif
  2473. #undef HDL
  2474.  
  2475. /****************************************************************************/
  2476.  
  2477. #define HDL E_IPC_OP_BINDING_MOUSE_ADD
  2478. #if (TYPE == E_REMOTE_OPTIONS)
  2479.    /* e_remote define command line args */
  2480.    OP("-binding-mouse-add", 6, "Add an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters", 0, HDL)
  2481. #elif (TYPE == E_REMOTE_OUT)
  2482.    /* e_remote parse command line args encode and send request */
  2483.    REQ_4INT_2STRING_START(HDL);
  2484.    E_Config_Binding_Mouse eb;
  2485.  
  2486.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  2487.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  2488.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  2489.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  2490.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  2491.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  2492.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  2493.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  2494.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  2495.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  2496.    else
  2497.      {
  2498.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  2499.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  2500.         exit(-1);
  2501.      }
  2502.    eb.button = atoi(params[1]);
  2503.    /* M1[|M2...] */
  2504.      {
  2505.         char *p, *pp;
  2506.  
  2507.         eb.modifiers = 0;
  2508.         pp = params[2];
  2509.         for (;;)
  2510.           {
  2511.              p = strchr(pp, '|');
  2512.              if (p)
  2513.                {
  2514.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2515.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2516.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2517.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2518.                   else if (pp[0] != 0)
  2519.                     {
  2520.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2521.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2522.                        exit(-1);
  2523.                     }
  2524.                   pp = p + 1;
  2525.                }
  2526.              else
  2527.                {
  2528.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2529.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2530.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2531.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2532.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  2533.                   else if (pp[0] != 0)
  2534.                     {
  2535.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2536.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2537.                        exit(-1);
  2538.                     }
  2539.                   break;
  2540.                }
  2541.           }
  2542.      }
  2543.    eb.any_mod = atoi(params[3]);
  2544.    eb.action = params[4];
  2545.    eb.params = params[5];
  2546.    REQ_4INT_2STRING_END(eb.context, eb.modifiers, eb.button, eb.any_mod, eb.action, eb.params, HDL);
  2547. #elif (TYPE == E_WM_IN)
  2548.    /* e_ipc decode request and do action */
  2549.    INT4_STRING2(v, HDL)
  2550.    E_Config_Binding_Mouse bind, *eb;
  2551.  
  2552.    bind.context = v->val1; 
  2553.    bind.modifiers = v->val2;
  2554.    bind.button = v->val3;
  2555.    bind.any_mod = v->val4;
  2556.    bind.action = v->str1; 
  2557.    bind.params = v->str2;
  2558.  
  2559.    eb = e_config_binding_mouse_match(&bind);
  2560.    if (!eb)
  2561.      {
  2562.         eb = E_NEW(E_Config_Binding_Mouse, 1);
  2563.         e_config->mouse_bindings = evas_list_append(e_config->mouse_bindings, eb);
  2564.         eb->context = bind.context;
  2565.         eb->button = bind.button;
  2566.         eb->modifiers = bind.modifiers;
  2567.         eb->any_mod = bind.any_mod;
  2568.         if (bind.action) eb->action = evas_stringshare_add(bind.action);
  2569.         if (bind.params) eb->params = evas_stringshare_add(bind.params);
  2570.         e_border_button_bindings_ungrab_all();
  2571.         e_bindings_mouse_add(bind.context, bind.button, bind.modifiers,
  2572.                         bind.any_mod, bind.action, bind.params);
  2573.     e_border_button_bindings_grab_all();
  2574.         e_config_save_queue();  
  2575.      }
  2576.    END_INT4_STRING2(v);
  2577. #elif (TYPE == E_REMOTE_IN)
  2578. #endif
  2579. #undef HDL
  2580.  
  2581. /****************************************************************************/
  2582.  
  2583. #define HDL E_IPC_OP_BINDING_MOUSE_DEL
  2584. #if (TYPE == E_REMOTE_OPTIONS)
  2585.    /* e_remote define command line args */
  2586.    OP("-binding-mouse-del", 6, "Delete an existing mouse binding. OPT1 = Context, OPT2 = button, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters", 0, HDL)
  2587. #elif (TYPE == E_REMOTE_OUT)
  2588.    /* e_remote parse command line args encode and send request */
  2589.    REQ_4INT_2STRING_START(HDL);
  2590.    E_Config_Binding_Mouse eb;
  2591.  
  2592.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  2593.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  2594.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  2595.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  2596.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  2597.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  2598.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  2599.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  2600.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  2601.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  2602.    else
  2603.      {
  2604.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  2605.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  2606.         exit(-1);
  2607.      }
  2608.    eb.button = atoi(params[1]);
  2609.    /* M1[|M2...] */
  2610.      {
  2611.         char *p, *pp;
  2612.  
  2613.         eb.modifiers = 0;
  2614.         pp = params[2];
  2615.         for (;;)
  2616.           {
  2617.              p = strchr(pp, '|');
  2618.              if (p)
  2619.                {
  2620.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2621.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2622.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2623.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2624.                   else if (pp[0] != 0)
  2625.                     {
  2626.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2627.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2628.                        exit(-1);
  2629.                     }
  2630.                   pp = p + 1;
  2631.                }
  2632.              else
  2633.                {
  2634.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2635.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2636.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2637.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2638.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  2639.                   else if (pp[0] != 0)
  2640.                     {
  2641.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2642.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2643.                        exit(-1);
  2644.                     }
  2645.                   break;
  2646.                }
  2647.           }
  2648.      }
  2649.    eb.any_mod = atoi(params[3]);
  2650.    eb.action = params[4];
  2651.    eb.params = params[5];
  2652.  
  2653.    REQ_4INT_2STRING_END(eb.context, eb.modifiers, eb.button, eb.any_mod, eb.action, eb.params, HDL);
  2654. #elif (TYPE == E_WM_IN)
  2655.    /* e_ipc decode request and do action */
  2656.    INT4_STRING2(v, HDL)
  2657.    E_Config_Binding_Mouse bind, *eb;
  2658.  
  2659.    bind.context = v->val1;
  2660.    bind.modifiers = v->val2;
  2661.    bind.button = v->val3;
  2662.    bind.any_mod = v->val4;
  2663.    bind.action = v->str1;
  2664.    bind.params = v->str2;
  2665.    
  2666.    eb = e_config_binding_mouse_match(&bind);
  2667.    if (eb)
  2668.      {
  2669.     e_config->mouse_bindings = evas_list_remove(e_config->mouse_bindings, eb);
  2670.         if (eb->action) evas_stringshare_del(eb->action);
  2671.         if (eb->params) evas_stringshare_del(eb->params);
  2672.         E_FREE(eb);
  2673.         e_border_button_bindings_ungrab_all();
  2674.         e_bindings_mouse_del(bind.context, bind.button, bind.modifiers,
  2675.                 bind.any_mod, bind.action, bind.params);
  2676.         e_border_button_bindings_grab_all();
  2677.         e_config_save_queue();
  2678.      }
  2679.    END_INT4_STRING2(v);
  2680. #elif (TYPE == E_REMOTE_IN)
  2681. #endif
  2682. #undef HDL
  2683.  
  2684. /****************************************************************************/
  2685.  
  2686. #define HDL E_IPC_OP_BINDING_KEY_LIST 
  2687. #if (TYPE == E_REMOTE_OPTIONS)
  2688.    /* e_remote define command line args */
  2689.    OP("-binding-key-list", 0, "List all key bindings", 1, HDL)
  2690. #elif (TYPE == E_REMOTE_OUT)
  2691.    /* e_remote parse command line args encode and send request */
  2692.    REQ_NULL(HDL);
  2693. #elif (TYPE == E_WM_IN)
  2694.    /* e_ipc decode request and do action or send reply */
  2695.    SEND_INT3_STRING3_LIST(e_config->key_bindings, E_Config_Binding_Key, ekb, v, HDL);
  2696.    v->val1 = ekb->context;
  2697.    v->val2 = ekb->modifiers;
  2698.    v->val3 = ekb->any_mod;
  2699.    v->str1 = ekb->key;
  2700.    v->str2 = ekb->action;
  2701.    v->str3 = ekb->params;
  2702.    END_SEND_INT3_STRING3_LIST(v, E_IPC_OP_BINDING_KEY_LIST_REPLY);
  2703. #elif (TYPE == E_REMOTE_IN)
  2704. #endif
  2705. #undef HDL
  2706.  
  2707. /****************************************************************************/
  2708.  
  2709. #define HDL E_IPC_OP_BINDING_KEY_LIST_REPLY
  2710. #if (TYPE == E_REMOTE_OPTIONS)
  2711. #elif (TYPE == E_REMOTE_OUT)
  2712. #elif (TYPE == E_WM_IN)
  2713. #elif (TYPE == E_REMOTE_IN)
  2714.    /* e_remote decode the response from e_ipc and print it to the console */
  2715.    INT3_STRING3_LIST(v, HDL);
  2716.    {
  2717.       char *context;
  2718.       char modifier[256];
  2719.       char *s1, *s2, *s3;
  2720.       
  2721.       if (v->val1 == E_BINDING_CONTEXT_NONE) context = "NONE";
  2722.       else if (v->val1 == E_BINDING_CONTEXT_UNKNOWN) context = "UNKNOWN";
  2723.       else if (v->val1 == E_BINDING_CONTEXT_BORDER) context = "BORDER";
  2724.       else if (v->val1 == E_BINDING_CONTEXT_ZONE) context = "ZONE";
  2725.       else if (v->val1 == E_BINDING_CONTEXT_CONTAINER) context = "CONTAINER";
  2726.       else if (v->val1 == E_BINDING_CONTEXT_MANAGER) context = "MANAGER";
  2727.       else if (v->val1 == E_BINDING_CONTEXT_MENU) context = "MENU";
  2728.       else if (v->val1 == E_BINDING_CONTEXT_WINLIST) context = "WINLIST";
  2729.       else if (v->val1 == E_BINDING_CONTEXT_POPUP) context = "POPUP";
  2730.       else if (v->val1 == E_BINDING_CONTEXT_ANY) context = "ANY";
  2731.       else context = "";
  2732.  
  2733.       modifier[0] = 0;
  2734.       if (v->val2 & E_BINDING_MODIFIER_SHIFT)
  2735.       {
  2736.         if (modifier[0] != 0) strcat(modifier, "|");
  2737.         strcat(modifier, "SHIFT");
  2738.       }
  2739.       if (v->val2 & E_BINDING_MODIFIER_CTRL)
  2740.       {
  2741.         if (modifier[0] != 0) strcat(modifier, "|");
  2742.         strcat(modifier, "CTRL");
  2743.       }
  2744.       if (v->val2 & E_BINDING_MODIFIER_ALT)
  2745.       {
  2746.         if (modifier[0] != 0) strcat(modifier, "|");
  2747.         strcat(modifier, "ALT");
  2748.       }
  2749.       if (v->val2 & E_BINDING_MODIFIER_WIN)
  2750.       {
  2751.         if (modifier[0] != 0) strcat(modifier, "|");
  2752.         strcat(modifier, "WIN");
  2753.       }
  2754.       if (v->val2 == E_BINDING_MODIFIER_NONE)
  2755.          strcpy(modifier, "NONE");
  2756.  
  2757.       s1 = v->str1;
  2758.       s2 = v->str2;
  2759.       s3 = v->str3;
  2760.       if (!s1) s1 = "";
  2761.       if (!s2) s2 = "";
  2762.       if (!s3) s3 = "";
  2763.       printf("REPLY: BINDING CONTEXT=%s KEY=\"%s\" MODIFIERS=%s ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n",
  2764.         context,
  2765.                 s1,
  2766.         modifier,
  2767.                 v->val3,
  2768.                 s2,
  2769.                 s3
  2770.         );
  2771.    }
  2772.    END_INT3_STRING3_LIST(v);
  2773. #elif E_LIB_IN
  2774.    INT3_STRING3_LIST_START(v, HDL);
  2775.    {
  2776.       int count = 0;
  2777.       RESPONSE(r, E_Response_Binding_Key_List);
  2778.       count = evas_list_count(dat);
  2779.       r->bindings = malloc(sizeof(E_Response_Binding_Key_Data *) * count);
  2780.       r->count = count;
  2781.  
  2782.       count = 0;
  2783.       INT3_STRING3_LIST_ITERATE(v);
  2784.       {
  2785.      E_Response_Binding_Key_Data *d;
  2786.  
  2787.      d = malloc(sizeof(E_Response_Binding_Key_Data));
  2788.      d->ctx = v->val1;
  2789.      d->key = ((v->str1) ? evas_stringshare_add(v->str1) : NULL);
  2790.      d->mod = v->val2;
  2791.      d->any_mod = v->val3;
  2792.      d->action = ((v->str2) ? evas_stringshare_add(v->str2) : NULL);
  2793.      d->params = ((v->str3) ? evas_stringshare_add(v->str3) : NULL);
  2794.  
  2795.      r->bindings[count] = d;
  2796.      count++;
  2797.       }
  2798.       END_INT3_STRING3_LIST_ITERATE(v);
  2799.       /* this will leak, need to free the event data */
  2800.       END_RESPONSE(r, E_RESPONSE_BINDING_KEY_LIST);
  2801.    }
  2802.    END_INT3_STRING3_LIST_START();
  2803. #endif
  2804. #undef HDL
  2805.  
  2806. /****************************************************************************/
  2807.  
  2808. #define HDL E_IPC_OP_BINDING_KEY_ADD
  2809. #if (TYPE == E_REMOTE_OPTIONS)
  2810.    /* e_remote define command line args */
  2811.    OP("-binding-key-add", 6, "Add an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters", 0, HDL)
  2812. #elif (TYPE == E_REMOTE_OUT)
  2813.    /* e_remote parse command line args encode and send request */
  2814.    REQ_3INT_3STRING_START(HDL);
  2815.    E_Config_Binding_Key eb;
  2816.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  2817.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  2818.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  2819.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  2820.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  2821.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  2822.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  2823.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  2824.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  2825.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  2826.    else
  2827.      {
  2828.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  2829.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  2830.         exit(-1);
  2831.      }
  2832.    eb.key = params[1];
  2833.    /* M1[|M2...] */
  2834.      {
  2835.     char *p, *pp;
  2836.     
  2837.     eb.modifiers = 0;
  2838.     pp = params[2];
  2839.     for (;;)
  2840.       {
  2841.          p = strchr(pp, '|');
  2842.          if (p)
  2843.            {
  2844.           if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2845.           else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2846.           else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2847.           else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2848.                   else if (pp[0] != 0)
  2849.             {
  2850.                printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2851.                   "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2852.                exit(-1);
  2853.             }
  2854.           pp = p + 1;
  2855.            }
  2856.          else
  2857.            {
  2858.           if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2859.           else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2860.           else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2861.           else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2862.           else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  2863.                   else if (pp[0] != 0)
  2864.             {
  2865.                printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2866.                   "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2867.                exit(-1);
  2868.             }
  2869.           break;
  2870.            }
  2871.       }
  2872.      }
  2873.    eb.any_mod = atoi(params[3]);
  2874.    eb.action = params[4];
  2875.    eb.params = params[5];
  2876.    REQ_3INT_3STRING_END(eb.context, eb.modifiers, eb.any_mod, eb.key, eb.action, eb.params, HDL);
  2877. #elif (TYPE == E_WM_IN)
  2878.    /* e_ipc decode request and do action */
  2879.    INT3_STRING3(v, HDL)
  2880.    E_Config_Binding_Key bind, *eb;
  2881.  
  2882.    bind.context = v->val1; 
  2883.    bind.modifiers = v->val2;
  2884.    bind.any_mod = v->val3;
  2885.    bind.key = v->str1; 
  2886.    bind.action = v->str2;
  2887.    bind.params = v->str3;
  2888.  
  2889.    eb = e_config_binding_key_match(&bind);
  2890.    if (!eb)
  2891.      {
  2892.         eb = E_NEW(E_Config_Binding_Key, 1);
  2893.         e_config->key_bindings = evas_list_append(e_config->key_bindings, eb);
  2894.         eb->context = bind.context;
  2895.         eb->modifiers = bind.modifiers;
  2896.         eb->any_mod = bind.any_mod;
  2897.         if (bind.key) eb->key = evas_stringshare_add(bind.key);
  2898.         if (bind.action) eb->action = evas_stringshare_add(bind.action);
  2899.         if (bind.params) eb->params = evas_stringshare_add(bind.params);
  2900.         e_managers_keys_ungrab();
  2901.         e_bindings_key_add(bind.context, bind.key, bind.modifiers,
  2902.                 bind.any_mod, bind.action, bind.params);
  2903.         e_managers_keys_grab();
  2904.         e_config_save_queue();
  2905.      }
  2906.    END_INT3_STRING3(v);
  2907. #elif (TYPE == E_REMOTE_IN)
  2908. #endif
  2909. #undef HDL
  2910.  
  2911. /****************************************************************************/
  2912.  
  2913. #define HDL E_IPC_OP_BINDING_KEY_DEL
  2914. #if (TYPE == E_REMOTE_OPTIONS)
  2915.    /* e_remote define command line args */
  2916.    OP("-binding-key-del", 6, "Delete an existing key binding. OPT1 = Context, OPT2 = key, OPT3 = modifiers, OPT4 = any modifier ok, OPT5 = action, OPT6 = action parameters", 0, HDL)
  2917. #elif (TYPE == E_REMOTE_OUT)
  2918.    /* e_remote parse command line args encode and send request */
  2919.    REQ_3INT_3STRING_START(HDL);
  2920.    E_Config_Binding_Key eb;
  2921.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  2922.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  2923.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  2924.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  2925.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  2926.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  2927.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  2928.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  2929.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  2930.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  2931.    else
  2932.      {
  2933.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  2934.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST ANY POPUP\n");
  2935.         exit(-1);
  2936.      }
  2937.    eb.key = params[1];
  2938.    /* M1[|M2...] */
  2939.      {
  2940.     char *p, *pp;
  2941.     
  2942.     eb.modifiers = 0;
  2943.     pp = params[2];
  2944.     for (;;)
  2945.       {
  2946.          p = strchr(pp, '|');
  2947.          if (p)
  2948.            {
  2949.           if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2950.           else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2951.           else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2952.           else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2953.                   else if (pp[0] != 0)
  2954.             {
  2955.                printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2956.                   "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2957.                exit(-1);
  2958.             }
  2959.           pp = p + 1;
  2960.            }
  2961.          else
  2962.            {
  2963.           if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  2964.           else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  2965.           else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  2966.           else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  2967.           else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  2968.                   else if (pp[0] != 0)
  2969.             {
  2970.                printf("OPT3 moidifier unknown. Must be or mask of:\n"
  2971.                   "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  2972.                exit(-1);
  2973.             }
  2974.           break;
  2975.            }
  2976.       }
  2977.      }
  2978.    eb.any_mod = atoi(params[3]);
  2979.    eb.action = params[4];
  2980.    eb.params = params[5];
  2981.    REQ_3INT_3STRING_END(eb.context, eb.modifiers, eb.any_mod, eb.key, eb.action, eb.params, HDL);
  2982. #elif (TYPE == E_WM_IN)
  2983.    /* e_ipc decode request and do action */
  2984.    INT3_STRING3(v, HDL)
  2985.    E_Config_Binding_Key bind, *eb;
  2986.  
  2987.    bind.context = v->val1; 
  2988.    bind.modifiers = v->val2;
  2989.    bind.any_mod = v->val3;
  2990.    bind.key = v->str1; 
  2991.    bind.action = v->str2;
  2992.    bind.params = v->str3;
  2993.  
  2994.    eb = e_config_binding_key_match(&bind);
  2995.    if (eb)
  2996.      {
  2997.        e_config->key_bindings = evas_list_remove(e_config->key_bindings, eb);
  2998.        if (eb->key) evas_stringshare_del(eb->key);
  2999.        if (eb->action) evas_stringshare_del(eb->action);
  3000.        if (eb->params) evas_stringshare_del(eb->params);
  3001.        E_FREE(eb);
  3002.        e_managers_keys_ungrab();
  3003.        e_bindings_key_del(bind.context, bind.key, bind.modifiers,
  3004.               bind.any_mod, bind.action, bind.params);
  3005.        e_managers_keys_grab();
  3006.        e_config_save_queue();
  3007.     }
  3008.  
  3009.    END_INT3_STRING3(v);
  3010. #elif (TYPE == E_REMOTE_IN)
  3011. #endif
  3012. #undef HDL
  3013.  
  3014. /****************************************************************************/
  3015. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_RAISE_SET
  3016. #if (TYPE == E_REMOTE_OPTIONS)
  3017.    OP("-always-click-to-raise-set", 1, "Set the always click to raise policy, 1 for enabled 0 for disabled", 0, HDL)
  3018. #elif (TYPE == E_REMOTE_OUT)
  3019.    REQ_INT(atoi(params[0]), HDL);
  3020. #elif (TYPE == E_WM_IN)
  3021.    START_INT(policy, HDL);
  3022.    e_config->always_click_to_raise = policy;
  3023.    E_CONFIG_LIMIT(e_config->always_click_to_raise, 0, 1);
  3024.    SAVE;
  3025.    END_INT;
  3026. #elif (TYPE == E_REMOTE_IN)
  3027. #endif
  3028. #undef HDL
  3029.  
  3030. /****************************************************************************/
  3031. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_RAISE_GET
  3032. #if (TYPE == E_REMOTE_OPTIONS)
  3033.    OP("-always-click-to-raise-get", 0, "Get the always click to raise policy, 1 for enabled 0 for disabled", 1, HDL)
  3034. #elif (TYPE == E_REMOTE_OUT)
  3035.    REQ_NULL(HDL);
  3036. #elif (TYPE == E_WM_IN)
  3037.    SEND_INT(e_config->always_click_to_raise, E_IPC_OP_ALWAYS_CLICK_TO_RAISE_GET_REPLY, HDL);
  3038. #elif (TYPE == E_REMOTE_IN)
  3039. #endif
  3040. #undef HDL
  3041.  
  3042. /****************************************************************************/
  3043. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_RAISE_GET_REPLY
  3044. #if (TYPE == E_REMOTE_OPTIONS)
  3045. #elif (TYPE == E_REMOTE_OUT)
  3046. #elif (TYPE == E_WM_IN)
  3047. #elif (TYPE == E_REMOTE_IN)
  3048.    START_INT(policy, HDL);
  3049.    printf("REPLY: POLICY=%d\n", policy);
  3050.    END_INT;
  3051. #endif
  3052. #undef HDL
  3053.  
  3054. /****************************************************************************/
  3055. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_FOCUS_SET
  3056. #if (TYPE == E_REMOTE_OPTIONS)
  3057.    OP("-always-click-to-focus-set", 1, "Set the always click to focus policy, 1 for enabled 0 for disabled", 0, HDL)
  3058. #elif (TYPE == E_REMOTE_OUT)
  3059.    REQ_INT(atoi(params[0]), HDL);
  3060. #elif (TYPE == E_WM_IN)
  3061.    START_INT(policy, HDL);
  3062.    e_config->always_click_to_focus = policy;
  3063.    E_CONFIG_LIMIT(e_config->always_click_to_focus, 0, 1);
  3064.    SAVE;
  3065.    END_INT;
  3066. #elif (TYPE == E_REMOTE_IN)
  3067. #endif
  3068. #undef HDL
  3069.  
  3070. /****************************************************************************/
  3071. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_FOCUS_GET
  3072. #if (TYPE == E_REMOTE_OPTIONS)
  3073.    OP("-always-click-to-focus-get", 0, "Get the always click to focus policy, 1 for enabled 0 for disabled", 1, HDL)
  3074. #elif (TYPE == E_REMOTE_OUT)
  3075.    REQ_NULL(HDL);
  3076. #elif (TYPE == E_WM_IN)
  3077.    SEND_INT(e_config->always_click_to_focus, E_IPC_OP_ALWAYS_CLICK_TO_FOCUS_GET_REPLY, HDL);
  3078. #elif (TYPE == E_REMOTE_IN)
  3079. #endif
  3080. #undef HDL
  3081.  
  3082. /****************************************************************************/
  3083. #define HDL E_IPC_OP_ALWAYS_CLICK_TO_FOCUS_GET_REPLY
  3084. #if (TYPE == E_REMOTE_OPTIONS)
  3085. #elif (TYPE == E_REMOTE_OUT)
  3086. #elif (TYPE == E_WM_IN)
  3087. #elif (TYPE == E_REMOTE_IN)
  3088.    START_INT(policy, HDL);
  3089.    printf("REPLY: POLICY=%d\n", policy);
  3090.    END_INT;
  3091. #endif
  3092. #undef HDL
  3093.  
  3094. /****************************************************************************/
  3095. #define HDL E_IPC_OP_USE_AUTO_RAISE_SET
  3096. #if (TYPE == E_REMOTE_OPTIONS)
  3097.    OP("-use-auto-raise-set", 1, "Set use auto raise policy, 1 for enabled 0 for disabled", 0, HDL)
  3098. #elif (TYPE == E_REMOTE_OUT)
  3099.    REQ_INT(atoi(params[0]), HDL);
  3100. #elif (TYPE == E_WM_IN)
  3101.    START_INT(policy, HDL);
  3102.    e_config->use_auto_raise = policy;
  3103.    E_CONFIG_LIMIT(e_config->use_auto_raise, 0, 1);
  3104.    SAVE;
  3105.    END_INT;
  3106. #elif (TYPE == E_REMOTE_IN)
  3107. #endif
  3108. #undef HDL
  3109.  
  3110. /****************************************************************************/
  3111. #define HDL E_IPC_OP_USE_AUTO_RAISE_GET
  3112. #if (TYPE == E_REMOTE_OPTIONS)
  3113.    OP("-use-auto-raise-get", 0, "Get use auto raise policy, 1 for enabled 0 for disabled", 1, HDL)
  3114. #elif (TYPE == E_REMOTE_OUT)
  3115.    REQ_NULL(HDL);
  3116. #elif (TYPE == E_WM_IN)
  3117.    SEND_INT(e_config->use_auto_raise, E_IPC_OP_USE_AUTO_RAISE_GET_REPLY, HDL);
  3118. #elif (TYPE == E_REMOTE_IN)
  3119. #endif
  3120. #undef HDL
  3121.  
  3122. /****************************************************************************/
  3123. #define HDL E_IPC_OP_USE_AUTO_RAISE_GET_REPLY
  3124. #if (TYPE == E_REMOTE_OPTIONS)
  3125. #elif (TYPE == E_REMOTE_OUT)
  3126. #elif (TYPE == E_WM_IN)
  3127. #elif (TYPE == E_REMOTE_IN)
  3128.    START_INT(policy, HDL);
  3129.    printf("REPLY: POLICY=%d\n", policy);
  3130.    END_INT;
  3131. #endif
  3132. #undef HDL
  3133.  
  3134. /****************************************************************************/
  3135. #define HDL E_IPC_OP_PASS_CLICK_ON_SET
  3136. #if (TYPE == E_REMOTE_OPTIONS)
  3137.    OP("-pass-click-on-set", 1, "Set pass click on policy, 1 for enabled 0 for disabled", 0, HDL)
  3138. #elif (TYPE == E_REMOTE_OUT)
  3139.    REQ_INT(atoi(params[0]), HDL);
  3140. #elif (TYPE == E_WM_IN)
  3141.    START_INT(policy, HDL);
  3142.    e_config->pass_click_on = policy;
  3143.    E_CONFIG_LIMIT(e_config->pass_click_on, 0, 1);
  3144.    SAVE;
  3145.    END_INT;
  3146. #elif (TYPE == E_REMOTE_IN)
  3147. #endif
  3148. #undef HDL
  3149.  
  3150. /****************************************************************************/
  3151. #define HDL E_IPC_OP_PASS_CLICK_ON_GET
  3152. #if (TYPE == E_REMOTE_OPTIONS)
  3153.    OP("-pass-click-on-get", 0, "Get pass click on policy, 1 for enabled 0 for disabled", 1, HDL)
  3154. #elif (TYPE == E_REMOTE_OUT)
  3155.    REQ_NULL(HDL);
  3156. #elif (TYPE == E_WM_IN)
  3157.    SEND_INT(e_config->pass_click_on, E_IPC_OP_PASS_CLICK_ON_GET_REPLY, HDL);
  3158. #elif (TYPE == E_REMOTE_IN)
  3159. #endif
  3160. #undef HDL
  3161.  
  3162. /****************************************************************************/
  3163. #define HDL E_IPC_OP_PASS_CLICK_ON_GET_REPLY
  3164. #if (TYPE == E_REMOTE_OPTIONS)
  3165. #elif (TYPE == E_REMOTE_OUT)
  3166. #elif (TYPE == E_WM_IN)
  3167. #elif (TYPE == E_REMOTE_IN)
  3168.    START_INT(policy, HDL);
  3169.    printf("REPLY: POLICY=%d\n", policy);
  3170.    END_INT;
  3171. #endif
  3172. #undef HDL
  3173.  
  3174. /****************************************************************************/
  3175. #define HDL E_IPC_OP_AUTO_RAISE_DELAY_SET
  3176. #if (TYPE == E_REMOTE_OPTIONS)
  3177.    OP("-auto-raise-delay-set", 1, "Set the auto raise delay (Seconds)", 0, HDL)
  3178. #elif (TYPE == E_REMOTE_OUT)
  3179.    REQ_DOUBLE(atof(params[0]), HDL);
  3180. #elif (TYPE == E_WM_IN)
  3181.    START_DOUBLE(dbl, HDL);
  3182.    e_config->auto_raise_delay = dbl;
  3183.    E_CONFIG_LIMIT(e_config->auto_raise_delay, 0.0, 5.0);
  3184.    SAVE;
  3185.    END_DOUBLE;
  3186. #elif (TYPE == E_REMOTE_IN)
  3187. #endif
  3188. #undef HDL
  3189.  
  3190. /****************************************************************************/
  3191. #define HDL E_IPC_OP_AUTO_RAISE_DELAY_GET
  3192. #if (TYPE == E_REMOTE_OPTIONS)
  3193.    OP("-auto-raise-delay-get", 0, "Get the auto raise delay  (Seconds)", 1, HDL)
  3194. #elif (TYPE == E_REMOTE_OUT)
  3195.    REQ_NULL(HDL);
  3196. #elif (TYPE == E_WM_IN)
  3197.    SEND_DOUBLE(e_config->auto_raise_delay, E_IPC_OP_AUTO_RAISE_DELAY_GET_REPLY, HDL);
  3198. #elif (TYPE == E_REMOTE_IN)
  3199. #endif
  3200. #undef HDL
  3201.  
  3202. /****************************************************************************/
  3203. #define HDL E_IPC_OP_AUTO_RAISE_DELAY_GET_REPLY
  3204. #if (TYPE == E_REMOTE_OPTIONS)
  3205. #elif (TYPE == E_REMOTE_OUT)
  3206. #elif (TYPE == E_WM_IN)
  3207. #elif (TYPE == E_REMOTE_IN)
  3208.    START_DOUBLE(dbl, HDL);
  3209.    printf("REPLY: DELAY=%3.3f\n", dbl);
  3210.    END_DOUBLE;
  3211. #endif
  3212. #undef HDL
  3213.  
  3214. /****************************************************************************/
  3215.  
  3216. #define HDL E_IPC_OP_USE_RESIST_SET
  3217. #if (TYPE == E_REMOTE_OPTIONS)
  3218.    OP("-use-resist-set", 1, "Set resist policy, 1 for enabled 0 for disabled", 0, HDL)
  3219. #elif (TYPE == E_REMOTE_OUT)
  3220.    REQ_INT(atoi(params[0]), HDL);
  3221. #elif (TYPE == E_WM_IN)
  3222.    START_INT(policy, HDL);
  3223.    e_config->use_resist = policy;
  3224.    E_CONFIG_LIMIT(e_config->use_resist, 0, 1);
  3225.    SAVE;
  3226.    END_INT;
  3227. #elif (TYPE == E_REMOTE_IN)
  3228. #endif
  3229. #undef HDL
  3230.  
  3231. /****************************************************************************/
  3232. #define HDL E_IPC_OP_USE_RESIST_GET
  3233. #if (TYPE == E_REMOTE_OPTIONS)
  3234.    OP("-use-resist-get", 0, "Get use resist policy, 1 for enabled 0 for disabled", 1, HDL)
  3235. #elif (TYPE == E_REMOTE_OUT)
  3236.    REQ_NULL(HDL);
  3237. #elif (TYPE == E_WM_IN)
  3238.    SEND_INT(e_config->use_resist, E_IPC_OP_USE_RESIST_GET_REPLY, HDL);
  3239. #elif (TYPE == E_REMOTE_IN)
  3240. #endif
  3241. #undef HDL
  3242.  
  3243. /****************************************************************************/
  3244. #define HDL E_IPC_OP_USE_RESIST_GET_REPLY
  3245. #if (TYPE == E_REMOTE_OPTIONS)
  3246. #elif (TYPE == E_REMOTE_OUT)
  3247. #elif (TYPE == E_WM_IN)
  3248. #elif (TYPE == E_REMOTE_IN)
  3249.    START_INT(policy, HDL);
  3250.    printf("REPLY: POLICY=%d\n", policy);
  3251.    END_INT;
  3252. #endif
  3253. #undef HDL
  3254.  
  3255. /****************************************************************************/
  3256.  
  3257. #define HDL E_IPC_OP_DRAG_RESIST_SET
  3258. #if (TYPE == E_REMOTE_OPTIONS)
  3259.    OP("-drag-resist-set", 1, "Set drag resist threshold (0-100)", 0, HDL)
  3260. #elif (TYPE == E_REMOTE_OUT)
  3261.    REQ_INT(atoi(params[0]), HDL);
  3262. #elif (TYPE == E_WM_IN)
  3263.    START_INT(val, HDL);
  3264.    e_config->drag_resist = val;
  3265.    E_CONFIG_LIMIT(e_config->drag_resist, 0, 100);
  3266.    SAVE;
  3267.    END_INT;
  3268. #elif (TYPE == E_REMOTE_IN)
  3269. #endif
  3270. #undef HDL
  3271.  
  3272. /****************************************************************************/
  3273. #define HDL E_IPC_OP_DRAG_RESIST_GET
  3274. #if (TYPE == E_REMOTE_OPTIONS)
  3275.    OP("-drag-resist-get", 0, "Get drag resist threshold", 1, HDL)
  3276. #elif (TYPE == E_REMOTE_OUT)
  3277.    REQ_NULL(HDL);
  3278. #elif (TYPE == E_WM_IN)
  3279.    SEND_INT(e_config->drag_resist, E_IPC_OP_DRAG_RESIST_GET_REPLY, HDL);
  3280. #elif (TYPE == E_REMOTE_IN)
  3281. #endif
  3282. #undef HDL
  3283.  
  3284. /****************************************************************************/
  3285. #define HDL E_IPC_OP_DRAG_RESIST_GET_REPLY
  3286. #if (TYPE == E_REMOTE_OPTIONS)
  3287. #elif (TYPE == E_REMOTE_OUT)
  3288. #elif (TYPE == E_WM_IN)
  3289. #elif (TYPE == E_REMOTE_IN)
  3290.    START_INT(val, HDL);
  3291.    printf("REPLY: THRESHOLD=%d\n", val);
  3292.    END_INT;
  3293. #endif
  3294. #undef HDL
  3295.  
  3296. /****************************************************************************/
  3297.  
  3298. #define HDL E_IPC_OP_DESK_RESIST_SET
  3299. #if (TYPE == E_REMOTE_OPTIONS)
  3300.    OP("-desk-resist-set", 1, "Set desktop resist threshold (0-100)", 0, HDL)
  3301. #elif (TYPE == E_REMOTE_OUT)
  3302.    REQ_INT(atoi(params[0]), HDL);
  3303. #elif (TYPE == E_WM_IN)
  3304.    START_INT(val, HDL);
  3305.    e_config->desk_resist = val;
  3306.    E_CONFIG_LIMIT(e_config->desk_resist, 0, 100);
  3307.    SAVE;
  3308.    END_INT;
  3309. #elif (TYPE == E_REMOTE_IN)
  3310. #endif
  3311. #undef HDL
  3312.  
  3313. /****************************************************************************/
  3314. #define HDL E_IPC_OP_DESK_RESIST_GET
  3315. #if (TYPE == E_REMOTE_OPTIONS)
  3316.    OP("-desk-resist-get", 0, "Get desktop resist threshold", 1, HDL)
  3317. #elif (TYPE == E_REMOTE_OUT)
  3318.    REQ_NULL(HDL);
  3319. #elif (TYPE == E_WM_IN)
  3320.    SEND_INT(e_config->desk_resist, E_IPC_OP_DESK_RESIST_GET_REPLY, HDL);
  3321. #elif (TYPE == E_REMOTE_IN)
  3322. #endif
  3323. #undef HDL
  3324.  
  3325. /****************************************************************************/
  3326. #define HDL E_IPC_OP_DESK_RESIST_GET_REPLY
  3327. #if (TYPE == E_REMOTE_OPTIONS)
  3328. #elif (TYPE == E_REMOTE_OUT)
  3329. #elif (TYPE == E_WM_IN)
  3330. #elif (TYPE == E_REMOTE_IN)
  3331.    START_INT(val, HDL);
  3332.    printf("REPLY: THRESHOLD=%d\n", val);
  3333.    END_INT;
  3334. #endif
  3335. #undef HDL
  3336.  
  3337. /****************************************************************************/
  3338.  
  3339. #define HDL E_IPC_OP_WINDOW_RESIST_SET
  3340. #if (TYPE == E_REMOTE_OPTIONS)
  3341.    OP("-window-resist-set", 1, "Set window resist threshold (0-100)", 0, HDL)
  3342. #elif (TYPE == E_REMOTE_OUT)
  3343.    REQ_INT(atoi(params[0]), HDL);
  3344. #elif (TYPE == E_WM_IN)
  3345.    START_INT(val, HDL);
  3346.    e_config->window_resist = val;
  3347.    E_CONFIG_LIMIT(e_config->window_resist, 0, 100);
  3348.    SAVE;
  3349.    END_INT;
  3350. #elif (TYPE == E_REMOTE_IN)
  3351. #endif
  3352. #undef HDL
  3353.  
  3354. /****************************************************************************/
  3355. #define HDL E_IPC_OP_WINDOW_RESIST_GET
  3356. #if (TYPE == E_REMOTE_OPTIONS)
  3357.    OP("-window-resist-get", 0, "Get window resist threshold", 1, HDL)
  3358. #elif (TYPE == E_REMOTE_OUT)
  3359.    REQ_NULL(HDL);
  3360. #elif (TYPE == E_WM_IN)
  3361.    SEND_INT(e_config->window_resist, E_IPC_OP_WINDOW_RESIST_GET_REPLY, HDL);
  3362. #elif (TYPE == E_REMOTE_IN)
  3363. #endif
  3364. #undef HDL
  3365.  
  3366. /****************************************************************************/
  3367. #define HDL E_IPC_OP_WINDOW_RESIST_GET_REPLY
  3368. #if (TYPE == E_REMOTE_OPTIONS)
  3369. #elif (TYPE == E_REMOTE_OUT)
  3370. #elif (TYPE == E_WM_IN)
  3371. #elif (TYPE == E_REMOTE_IN)
  3372.    START_INT(val, HDL);
  3373.    printf("REPLY: THRESHOLD=%d\n", val);
  3374.    END_INT;
  3375. #endif
  3376. #undef HDL
  3377.  
  3378. /****************************************************************************/
  3379.  
  3380. #define HDL E_IPC_OP_GADGET_RESIST_SET
  3381. #if (TYPE == E_REMOTE_OPTIONS)
  3382.    OP("-gadget-resist-set", 1, "Set gadget resist threshold (0-100)", 0, HDL)
  3383. #elif (TYPE == E_REMOTE_OUT)
  3384.    REQ_INT(atoi(params[0]), HDL);
  3385. #elif (TYPE == E_WM_IN)
  3386.    START_INT(val, HDL);
  3387.    e_config->gadget_resist = val;
  3388.    E_CONFIG_LIMIT(e_config->gadget_resist, 0, 100);
  3389.    SAVE;
  3390.    END_INT;
  3391. #elif (TYPE == E_REMOTE_IN)
  3392. #endif
  3393. #undef HDL
  3394.  
  3395. /****************************************************************************/
  3396. #define HDL E_IPC_OP_GADGET_RESIST_GET
  3397. #if (TYPE == E_REMOTE_OPTIONS)
  3398.    OP("-gadget-resist-get", 0, "Get gadget resist threshold", 1, HDL)
  3399. #elif (TYPE == E_REMOTE_OUT)
  3400.    REQ_NULL(HDL);
  3401. #elif (TYPE == E_WM_IN)
  3402.    SEND_INT(e_config->gadget_resist, E_IPC_OP_GADGET_RESIST_GET_REPLY, HDL);
  3403. #elif (TYPE == E_REMOTE_IN)
  3404. #endif
  3405. #undef HDL
  3406.  
  3407. /****************************************************************************/
  3408. #define HDL E_IPC_OP_GADGET_RESIST_GET_REPLY
  3409. #if (TYPE == E_REMOTE_OPTIONS)
  3410. #elif (TYPE == E_REMOTE_OUT)
  3411. #elif (TYPE == E_WM_IN)
  3412. #elif (TYPE == E_REMOTE_IN)
  3413.    START_INT(val, HDL);
  3414.    printf("REPLY: THRESHOLD=%d\n", val);
  3415.    END_INT;
  3416. #endif
  3417. #undef HDL
  3418.  
  3419. /****************************************************************************/
  3420. #define HDL E_IPC_OP_DESKTOP_BG_ADD
  3421. #if (TYPE == E_REMOTE_OPTIONS)
  3422.    OP("-desktop-bg-add", 5, "Add a desktop bg definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = bg file path", 0, HDL)
  3423. #elif (TYPE == E_REMOTE_OUT)
  3424.    REQ_4INT_2STRING_START(HDL);
  3425.    REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), params[4], "", HDL);
  3426. #elif (TYPE == E_WM_IN)
  3427.    INT4_STRING2(v, HDL);
  3428.    e_bg_add(v->val1, v->val2, v->val3, v->val4, v->str1);
  3429.    e_bg_update();
  3430.    SAVE;
  3431.    END_INT4_STRING2(v);
  3432. #elif (TYPE == E_REMOTE_IN)
  3433. #endif
  3434. #undef HDL
  3435.  
  3436. /****************************************************************************/
  3437. #define HDL E_IPC_OP_DESKTOP_BG_DEL
  3438. #if (TYPE == E_REMOTE_OPTIONS)
  3439.    OP("-desktop-bg-del", 4, "Delete a desktop bg definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y.", 0, HDL)
  3440. #elif (TYPE == E_REMOTE_OUT)
  3441.    REQ_4INT_2STRING_START(HDL);
  3442.    REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), "", "", HDL);
  3443. #elif (TYPE == E_WM_IN)
  3444.    INT4_STRING2(v, HDL);
  3445.    e_bg_del(v->val1, v->val2, v->val3, v->val4);
  3446.    e_bg_update();
  3447.    SAVE;
  3448.    END_INT4_STRING2(v);
  3449. #elif (TYPE == E_REMOTE_IN)
  3450. #endif
  3451. #undef HDL
  3452.  
  3453. /****************************************************************************/
  3454. #define HDL E_IPC_OP_DESKTOP_BG_LIST
  3455. #if (TYPE == E_REMOTE_OPTIONS)
  3456.    OP("-desktop-bg-list", 0, "List all current desktop bg definitions", 1, HDL)
  3457. #elif (TYPE == E_REMOTE_OUT)
  3458.    REQ_NULL(HDL);
  3459. #elif (TYPE == E_WM_IN)
  3460.    SEND_INT4_STRING2_LIST(e_config->desktop_backgrounds, E_Config_Desktop_Background, cfbg, v, HDL);
  3461.    v->val1 = cfbg->container;
  3462.    v->val2 = cfbg->zone;
  3463.    v->val3 = cfbg->desk_x;
  3464.    v->val4 = cfbg->desk_y;
  3465.    v->str1 = cfbg->file;
  3466.    v->str2 = "";
  3467.    END_SEND_INT4_STRING2_LIST(v, E_IPC_OP_DESKTOP_BG_LIST_REPLY);
  3468. #elif (TYPE == E_REMOTE_IN)
  3469. #endif
  3470. #undef HDL
  3471.  
  3472. /****************************************************************************/
  3473. #define HDL E_IPC_OP_DESKTOP_BG_LIST_REPLY
  3474. #if (TYPE == E_REMOTE_OPTIONS)
  3475. #elif (TYPE == E_REMOTE_OUT)
  3476. #elif (TYPE == E_WM_IN)
  3477. #elif (TYPE == E_REMOTE_IN)
  3478.    INT4_STRING2_LIST(v, HDL);
  3479.    printf("REPLY: BG CONTAINER=%i ZONE=%i DESK_X=%i DESK_Y=%i FILE=\"%s\"\n",
  3480.       v->val1, v->val2, v->val3, v->val4, v->str1);
  3481.    END_INT4_STRING2_LIST(v);
  3482. #endif
  3483. #undef HDL
  3484.  
  3485. /****************************************************************************/
  3486. #define HDL E_IPC_OP_WINLIST_WARP_WHILE_SELECTING_SET
  3487. #if (TYPE == E_REMOTE_OPTIONS)
  3488.    OP("-winlist-warp-while-selecting-set", 1, "Set winlist (alt+tab) warp while selecting policy", 0, HDL)
  3489. #elif (TYPE == E_REMOTE_OUT)
  3490.    REQ_INT(atoi(params[0]), HDL);
  3491. #elif (TYPE == E_WM_IN)
  3492.    START_INT(policy, HDL);
  3493.    e_config->winlist_warp_while_selecting = policy;
  3494.    E_CONFIG_LIMIT(e_config->winlist_warp_while_selecting, 0, 1);
  3495.    SAVE;
  3496.    END_INT;
  3497. #elif (TYPE == E_REMOTE_IN)
  3498. #endif
  3499. #undef HDL
  3500.  
  3501. /****************************************************************************/
  3502. #define HDL E_IPC_OP_WINLIST_WARP_WHILE_SELECTING_GET
  3503. #if (TYPE == E_REMOTE_OPTIONS)
  3504.    OP("-winlist-warp-while-selecting-get", 0, "Get winlist (alt+tab) warp while selecting policy", 1, HDL)
  3505. #elif (TYPE == E_REMOTE_OUT)
  3506.    REQ_NULL(HDL);
  3507. #elif (TYPE == E_WM_IN)
  3508.    SEND_INT(e_config->winlist_warp_while_selecting, E_IPC_OP_WINLIST_WARP_WHILE_SELECTING_GET_REPLY, HDL);
  3509. #elif (TYPE == E_REMOTE_IN)
  3510. #endif
  3511. #undef HDL
  3512.  
  3513. /****************************************************************************/
  3514. #define HDL E_IPC_OP_WINLIST_WARP_WHILE_SELECTING_GET_REPLY
  3515. #if (TYPE == E_REMOTE_OPTIONS)
  3516. #elif (TYPE == E_REMOTE_OUT)
  3517. #elif (TYPE == E_WM_IN)
  3518. #elif (TYPE == E_REMOTE_IN)
  3519.    START_INT(val, HDL);
  3520.    printf("REPLY: POLICY=%d\n", val);
  3521.    END_INT;
  3522. #endif
  3523. #undef HDL
  3524.  
  3525. /****************************************************************************/
  3526.  
  3527. #define HDL E_IPC_OP_WINLIST_WARP_AT_END_SET
  3528. #if (TYPE == E_REMOTE_OPTIONS)
  3529.    OP("-winlist-warp-at-end-set", 1, "Set winlist (alt+tab) warp at end policy", 0, HDL)
  3530. #elif (TYPE == E_REMOTE_OUT)
  3531.    REQ_INT(atoi(params[0]), HDL);
  3532. #elif (TYPE == E_WM_IN)
  3533.    START_INT(policy, HDL);
  3534.    e_config->winlist_warp_at_end = policy;
  3535.    E_CONFIG_LIMIT(e_config->winlist_warp_at_end, 0, 1);
  3536.    SAVE;
  3537.    END_INT;
  3538. #elif (TYPE == E_REMOTE_IN)
  3539. #endif
  3540. #undef HDL
  3541.  
  3542. /****************************************************************************/
  3543. #define HDL E_IPC_OP_WINLIST_WARP_AT_END_GET
  3544. #if (TYPE == E_REMOTE_OPTIONS)
  3545.    OP("-winlist-warp-at-end-get", 0, "Get winlist (alt+tab) warp at end policy", 1, HDL)
  3546. #elif (TYPE == E_REMOTE_OUT)
  3547.    REQ_NULL(HDL);
  3548. #elif (TYPE == E_WM_IN)
  3549.    SEND_INT(e_config->winlist_warp_at_end, E_IPC_OP_WINLIST_WARP_AT_END_GET_REPLY, HDL);
  3550. #elif (TYPE == E_REMOTE_IN)
  3551. #endif
  3552. #undef HDL
  3553.  
  3554. /****************************************************************************/
  3555. #define HDL E_IPC_OP_WINLIST_WARP_AT_END_GET_REPLY
  3556. #if (TYPE == E_REMOTE_OPTIONS)
  3557. #elif (TYPE == E_REMOTE_OUT)
  3558. #elif (TYPE == E_WM_IN)
  3559. #elif (TYPE == E_REMOTE_IN)
  3560.    START_INT(val, HDL);
  3561.    printf("REPLY: POLICY=%d\n", val);
  3562.    END_INT;
  3563. #endif
  3564. #undef HDL
  3565.  
  3566. /****************************************************************************/
  3567. #define HDL E_IPC_OP_WINLIST_WARP_SPEED_SET
  3568. #if (TYPE == E_REMOTE_OPTIONS)
  3569.    OP("-winlist-warp-speed-set", 1, "Set winlist warp speed (0.0-1.0)", 0, HDL)
  3570. #elif (TYPE == E_REMOTE_OUT)
  3571.    REQ_DOUBLE(atof(params[0]), HDL);
  3572. #elif (TYPE == E_WM_IN)
  3573.    START_DOUBLE(val, HDL);
  3574.    e_config->winlist_warp_speed = val;
  3575.    E_CONFIG_LIMIT(e_config->winlist_warp_speed, 0.0, 1.0);
  3576.    SAVE;
  3577.    END_DOUBLE;
  3578. #elif (TYPE == E_REMOTE_IN)
  3579. #endif
  3580. #undef HDL
  3581.  
  3582. /****************************************************************************/
  3583. #define HDL E_IPC_OP_WINLIST_WARP_SPEED_GET
  3584. #if (TYPE == E_REMOTE_OPTIONS)
  3585.    OP("-winlist-warp-speed-get", 0, "Get winlist warp speed", 1, HDL)
  3586. #elif (TYPE == E_REMOTE_OUT)
  3587.    REQ_NULL(HDL);
  3588. #elif (TYPE == E_WM_IN)
  3589.    SEND_DOUBLE(e_config->winlist_warp_speed, E_IPC_OP_WINLIST_WARP_SPEED_GET_REPLY, HDL);
  3590. #elif (TYPE == E_REMOTE_IN)
  3591. #endif
  3592. #undef HDL
  3593.  
  3594. /****************************************************************************/
  3595. #define HDL E_IPC_OP_WINLIST_WARP_SPEED_GET_REPLY
  3596. #if (TYPE == E_REMOTE_OPTIONS)
  3597. #elif (TYPE == E_REMOTE_OUT)
  3598. #elif (TYPE == E_WM_IN)
  3599. #elif (TYPE == E_REMOTE_IN)
  3600.    START_DOUBLE(val, HDL);
  3601.    printf("REPLY: SPEED=%3.3f\n", val);
  3602.    END_DOUBLE;
  3603. #endif
  3604. #undef HDL
  3605.  
  3606. /****************************************************************************/
  3607.  
  3608. #define HDL E_IPC_OP_WINLIST_SCROLL_ANIMATE_SET
  3609. #if (TYPE == E_REMOTE_OPTIONS)
  3610.    OP("-winlist-scroll-animate-set", 1, "Set winlist (alt+tab) scroll animate policy", 0, HDL)
  3611. #elif (TYPE == E_REMOTE_OUT)
  3612.    REQ_INT(atoi(params[0]), HDL);
  3613. #elif (TYPE == E_WM_IN)
  3614.    START_INT(policy, HDL);
  3615.    e_config->winlist_scroll_animate = policy;
  3616.    E_CONFIG_LIMIT(e_config->winlist_scroll_animate, 0, 1);
  3617.    SAVE;
  3618.    END_INT;
  3619. #elif (TYPE == E_REMOTE_IN)
  3620. #endif
  3621. #undef HDL
  3622.  
  3623. /****************************************************************************/
  3624. #define HDL E_IPC_OP_WINLIST_SCROLL_ANIMATE_GET
  3625. #if (TYPE == E_REMOTE_OPTIONS)
  3626.    OP("-winlist-scroll-animate-get", 0, "Get winlist (alt+tab) scroll animate policy", 1, HDL)
  3627. #elif (TYPE == E_REMOTE_OUT)
  3628.    REQ_NULL(HDL);
  3629. #elif (TYPE == E_WM_IN)
  3630.    SEND_INT(e_config->winlist_scroll_animate, E_IPC_OP_WINLIST_SCROLL_ANIMATE_GET_REPLY, HDL);
  3631. #elif (TYPE == E_REMOTE_IN)
  3632. #endif
  3633. #undef HDL
  3634.  
  3635. /****************************************************************************/
  3636. #define HDL E_IPC_OP_WINLIST_SCROLL_ANIMATE_GET_REPLY
  3637. #if (TYPE == E_REMOTE_OPTIONS)
  3638. #elif (TYPE == E_REMOTE_OUT)
  3639. #elif (TYPE == E_WM_IN)
  3640. #elif (TYPE == E_REMOTE_IN)
  3641.    START_INT(val, HDL);
  3642.    printf("REPLY: POLICY=%d\n", val);
  3643.    END_INT;
  3644. #endif
  3645. #undef HDL
  3646.  
  3647. /****************************************************************************/
  3648. #define HDL E_IPC_OP_WINLIST_SCROLL_SPEED_SET
  3649. #if (TYPE == E_REMOTE_OPTIONS)
  3650.    OP("-winlist-scroll-speed-set", 1, "Set winlist scroll speed (0.0-1.0)", 0, HDL)
  3651. #elif (TYPE == E_REMOTE_OUT)
  3652.    REQ_DOUBLE(atof(params[0]), HDL);
  3653. #elif (TYPE == E_WM_IN)
  3654.    START_DOUBLE(val, HDL);
  3655.    e_config->winlist_scroll_speed = val;
  3656.    E_CONFIG_LIMIT(e_config->winlist_scroll_speed, 0.0, 1.0);
  3657.    SAVE;
  3658.    END_DOUBLE;
  3659. #elif (TYPE == E_REMOTE_IN)
  3660. #endif
  3661. #undef HDL
  3662.  
  3663. /****************************************************************************/
  3664. #define HDL E_IPC_OP_WINLIST_SCROLL_SPEED_GET
  3665. #if (TYPE == E_REMOTE_OPTIONS)
  3666.    OP("-winlist-scroll-speed-get", 0, "Get winlist scroll speed", 1, HDL)
  3667. #elif (TYPE == E_REMOTE_OUT)
  3668.    REQ_NULL(HDL);
  3669. #elif (TYPE == E_WM_IN)
  3670.    SEND_DOUBLE(e_config->winlist_scroll_speed, E_IPC_OP_WINLIST_SCROLL_SPEED_GET_REPLY, HDL);
  3671. #elif (TYPE == E_REMOTE_IN)
  3672. #endif
  3673. #undef HDL
  3674.  
  3675. /****************************************************************************/
  3676. #define HDL E_IPC_OP_WINLIST_SCROLL_SPEED_GET_REPLY
  3677. #if (TYPE == E_REMOTE_OPTIONS)
  3678. #elif (TYPE == E_REMOTE_OUT)
  3679. #elif (TYPE == E_WM_IN)
  3680. #elif (TYPE == E_REMOTE_IN)
  3681.    START_DOUBLE(val, HDL);
  3682.    printf("REPLY: SPEED=%3.3f\n", val);
  3683.    END_DOUBLE;
  3684. #endif
  3685. #undef HDL
  3686.  
  3687. /****************************************************************************/
  3688.  
  3689. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_ICONIFIED_SET
  3690. #if (TYPE == E_REMOTE_OPTIONS)
  3691.    OP("-winlist-list-show-iconified-set", 1, "Set whether winlist (alt+tab) will show iconfied windows", 0, HDL)
  3692. #elif (TYPE == E_REMOTE_OUT)
  3693.    REQ_INT(atoi(params[0]), HDL);
  3694. #elif (TYPE == E_WM_IN)
  3695.    START_INT(policy, HDL);
  3696.    e_config->winlist_list_show_iconified = policy;
  3697.    E_CONFIG_LIMIT(e_config->winlist_list_show_iconified, 0, 1);
  3698.    SAVE;
  3699.    END_INT;
  3700. #elif (TYPE == E_REMOTE_IN)
  3701. #endif
  3702. #undef HDL
  3703.  
  3704. /****************************************************************************/
  3705. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_ICONIFIED_GET
  3706. #if (TYPE == E_REMOTE_OPTIONS)
  3707.    OP("-winlist-list-show-iconified-get", 0, "Get whether winlist (alt+tab) will show iconfied windows", 1, HDL)
  3708. #elif (TYPE == E_REMOTE_OUT)
  3709.    REQ_NULL(HDL);
  3710. #elif (TYPE == E_WM_IN)
  3711.    SEND_INT(e_config->winlist_list_show_iconified, E_IPC_OP_WINLIST_LIST_SHOW_ICONIFIED_GET_REPLY, HDL);
  3712. #elif (TYPE == E_REMOTE_IN)
  3713. #endif
  3714. #undef HDL
  3715.  
  3716. /****************************************************************************/
  3717. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_ICONIFIED_GET_REPLY
  3718. #if (TYPE == E_REMOTE_OPTIONS)
  3719. #elif (TYPE == E_REMOTE_OUT)
  3720. #elif (TYPE == E_WM_IN)
  3721. #elif (TYPE == E_REMOTE_IN)
  3722.    START_INT(val, HDL);
  3723.    printf("REPLY: POLICY=%d\n", val);
  3724.    END_INT;
  3725. #endif
  3726. #undef HDL
  3727.  
  3728. /****************************************************************************/
  3729.  
  3730. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_DESK_WINDOWS_SET
  3731. #if (TYPE == E_REMOTE_OPTIONS)
  3732.    OP("-winlist-list-show-other-desk-windows-set", 1, "Set whether winlist (alt+tab) will show other desk windows", 0, HDL)
  3733. #elif (TYPE == E_REMOTE_OUT)
  3734.    REQ_INT(atoi(params[0]), HDL);
  3735. #elif (TYPE == E_WM_IN)
  3736.    START_INT(policy, HDL);
  3737.    e_config->winlist_list_show_other_desk_windows = policy;
  3738.    E_CONFIG_LIMIT(e_config->winlist_list_show_other_desk_windows, 0, 1);
  3739.    SAVE;
  3740.    END_INT;
  3741. #elif (TYPE == E_REMOTE_IN)
  3742. #endif
  3743. #undef HDL
  3744.  
  3745. /****************************************************************************/
  3746. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_DESK_WINDOWS_GET
  3747. #if (TYPE == E_REMOTE_OPTIONS)
  3748.    OP("-winlist-list-show-other-desk-windows-get", 0, "Get winlist (alt+tab) show other desk windows", 1, HDL)
  3749. #elif (TYPE == E_REMOTE_OUT)
  3750.    REQ_NULL(HDL);
  3751. #elif (TYPE == E_WM_IN)
  3752.    SEND_INT(e_config->winlist_list_show_other_desk_windows, E_IPC_OP_WINLIST_LIST_SHOW_OTHER_DESK_WINDOWS_GET_REPLY, HDL);
  3753. #elif (TYPE == E_REMOTE_IN)
  3754. #endif
  3755. #undef HDL
  3756.  
  3757. /****************************************************************************/
  3758. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_DESK_WINDOWS_GET_REPLY
  3759. #if (TYPE == E_REMOTE_OPTIONS)
  3760. #elif (TYPE == E_REMOTE_OUT)
  3761. #elif (TYPE == E_WM_IN)
  3762. #elif (TYPE == E_REMOTE_IN)
  3763.    START_INT(val, HDL);
  3764.    printf("REPLY: POLICY=%d\n", val);
  3765.    END_INT;
  3766. #endif
  3767. #undef HDL
  3768.  
  3769. /****************************************************************************/
  3770.  
  3771. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_SCREEN_WINDOWS_SET
  3772. #if (TYPE == E_REMOTE_OPTIONS)
  3773.    OP("-winlist-list-show-other-screen-windows-set", 1, "Set winlist (alt+tab) show other screen windows policy", 0, HDL)
  3774. #elif (TYPE == E_REMOTE_OUT)
  3775.    REQ_INT(atoi(params[0]), HDL);
  3776. #elif (TYPE == E_WM_IN)
  3777.    START_INT(policy, HDL);
  3778.    e_config->winlist_list_show_other_screen_windows = policy;
  3779.    E_CONFIG_LIMIT(e_config->winlist_list_show_other_screen_windows, 0, 1);
  3780.    SAVE;
  3781.    END_INT;
  3782. #elif (TYPE == E_REMOTE_IN)
  3783. #endif
  3784. #undef HDL
  3785.  
  3786. /****************************************************************************/
  3787. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_SCREEN_WINDOWS_GET
  3788. #if (TYPE == E_REMOTE_OPTIONS)
  3789.    OP("-winlist-list-show-other-screen-windows-get", 0, "Get winlist (alt+tab) show other screen windows policy", 1, HDL)
  3790. #elif (TYPE == E_REMOTE_OUT)
  3791.    REQ_NULL(HDL);
  3792. #elif (TYPE == E_WM_IN)
  3793.    SEND_INT(e_config->winlist_list_show_other_screen_windows, E_IPC_OP_WINLIST_LIST_SHOW_OTHER_SCREEN_WINDOWS_GET_REPLY, HDL);
  3794. #elif (TYPE == E_REMOTE_IN)
  3795. #endif
  3796. #undef HDL
  3797.  
  3798. /****************************************************************************/
  3799. #define HDL E_IPC_OP_WINLIST_LIST_SHOW_OTHER_SCREEN_WINDOWS_GET_REPLY
  3800. #if (TYPE == E_REMOTE_OPTIONS)
  3801. #elif (TYPE == E_REMOTE_OUT)
  3802. #elif (TYPE == E_WM_IN)
  3803. #elif (TYPE == E_REMOTE_IN)
  3804.    START_INT(val, HDL);
  3805.    printf("REPLY: POLICY=%d\n", val);
  3806.    END_INT;
  3807. #endif
  3808. #undef HDL
  3809.  
  3810. /****************************************************************************/
  3811.  
  3812. #define HDL E_IPC_OP_WINLIST_LIST_UNCOVER_WHILE_SELECTING_SET
  3813. #if (TYPE == E_REMOTE_OPTIONS)
  3814.    OP("-winlist-list-uncover-while-selecting-set", 1, "Set whether winlist (alt+tab) will show iconified windows while selecting", 0, HDL)
  3815. #elif (TYPE == E_REMOTE_OUT)
  3816.    REQ_INT(atoi(params[0]), HDL);
  3817. #elif (TYPE == E_WM_IN)
  3818.    START_INT(policy, HDL);
  3819.    e_config->winlist_list_uncover_while_selecting = policy;
  3820.    E_CONFIG_LIMIT(e_config->winlist_list_uncover_while_selecting, 0, 1);
  3821.    SAVE;
  3822.    END_INT;
  3823. #elif (TYPE == E_REMOTE_IN)
  3824. #endif
  3825. #undef HDL
  3826.  
  3827. /****************************************************************************/
  3828. #define HDL E_IPC_OP_WINLIST_LIST_UNCOVER_WHILE_SELECTING_GET
  3829. #if (TYPE == E_REMOTE_OPTIONS)
  3830.    OP("-winlist-list-uncover-while-selecting-get", 0, "Get whether winlist (alt+tab) will show iconified windows while selecting", 1, HDL)
  3831. #elif (TYPE == E_REMOTE_OUT)
  3832.    REQ_NULL(HDL);
  3833. #elif (TYPE == E_WM_IN)
  3834.    SEND_INT(e_config->winlist_list_uncover_while_selecting, E_IPC_OP_WINLIST_LIST_UNCOVER_WHILE_SELECTING_GET_REPLY, HDL);
  3835. #elif (TYPE == E_REMOTE_IN)
  3836. #endif
  3837. #undef HDL
  3838.  
  3839. /****************************************************************************/
  3840. #define HDL E_IPC_OP_WINLIST_LIST_UNCOVER_WHILE_SELECTING_GET_REPLY
  3841. #if (TYPE == E_REMOTE_OPTIONS)
  3842. #elif (TYPE == E_REMOTE_OUT)
  3843. #elif (TYPE == E_WM_IN)
  3844. #elif (TYPE == E_REMOTE_IN)
  3845.    START_INT(val, HDL);
  3846.    printf("REPLY: POLICY=%d\n", val);
  3847.    END_INT;
  3848. #endif
  3849. #undef HDL
  3850.  
  3851. /****************************************************************************/
  3852.  
  3853. #define HDL E_IPC_OP_WINLIST_LIST_JUMP_DESK_WHILE_SELECTING_SET
  3854. #if (TYPE == E_REMOTE_OPTIONS)
  3855.    OP("-winlist-list-jump-desk-while-selecting-set", 1, "Set winlist (alt+tab) jump desk while selecting policy", 0, HDL)
  3856. #elif (TYPE == E_REMOTE_OUT)
  3857.    REQ_INT(atoi(params[0]), HDL);
  3858. #elif (TYPE == E_WM_IN)
  3859.    START_INT(policy, HDL);
  3860.    e_config->winlist_list_jump_desk_while_selecting = policy;
  3861.    E_CONFIG_LIMIT(e_config->winlist_list_jump_desk_while_selecting, 0, 1);
  3862.    SAVE;
  3863.    END_INT;
  3864. #elif (TYPE == E_REMOTE_IN)
  3865. #endif
  3866. #undef HDL
  3867.  
  3868. /****************************************************************************/
  3869. #define HDL E_IPC_OP_WINLIST_LIST_JUMP_DESK_WHILE_SELECTING_GET
  3870. #if (TYPE == E_REMOTE_OPTIONS)
  3871.    OP("-winlist-list-jump-desk-while-selecting-get", 0, "Get winlist (alt+tab) jump desk while selecting policy", 1, HDL)
  3872. #elif (TYPE == E_REMOTE_OUT)
  3873.    REQ_NULL(HDL);
  3874. #elif (TYPE == E_WM_IN)
  3875.    SEND_INT(e_config->winlist_list_jump_desk_while_selecting, E_IPC_OP_WINLIST_LIST_JUMP_DESK_WHILE_SELECTING_GET_REPLY, HDL);
  3876. #elif (TYPE == E_REMOTE_IN)
  3877. #endif
  3878. #undef HDL
  3879.  
  3880. /****************************************************************************/
  3881. #define HDL E_IPC_OP_WINLIST_LIST_JUMP_DESK_WHILE_SELECTING_GET_REPLY
  3882. #if (TYPE == E_REMOTE_OPTIONS)
  3883. #elif (TYPE == E_REMOTE_OUT)
  3884. #elif (TYPE == E_WM_IN)
  3885. #elif (TYPE == E_REMOTE_IN)
  3886.    START_INT(policy, HDL);
  3887.    printf("REPLY: POLICY=%d\n", policy);
  3888.    END_INT;
  3889. #endif
  3890. #undef HDL
  3891.  
  3892.  
  3893. /****************************************************************************/
  3894. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_X_SET
  3895. #if (TYPE == E_REMOTE_OPTIONS)
  3896.    OP("-winlist-pos-align-x-set", 1, "Set winlist position align for x axis (0.0-1.0)", 0, HDL)
  3897. #elif (TYPE == E_REMOTE_OUT)
  3898.    REQ_DOUBLE(atof(params[0]), HDL);
  3899. #elif (TYPE == E_WM_IN)
  3900.    START_DOUBLE(val, HDL);
  3901.    e_config->winlist_pos_align_x = val;
  3902.    E_CONFIG_LIMIT(e_config->winlist_pos_align_x, 0.0, 1.0);
  3903.    SAVE;
  3904.    END_DOUBLE;
  3905. #elif (TYPE == E_REMOTE_IN)
  3906. #endif
  3907. #undef HDL
  3908.  
  3909. /****************************************************************************/
  3910. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_X_GET
  3911. #if (TYPE == E_REMOTE_OPTIONS)
  3912.    OP("-winlist-pos-align-x-get", 0, "Get winlist position align for x axis", 1, HDL)
  3913. #elif (TYPE == E_REMOTE_OUT)
  3914.    REQ_NULL(HDL);
  3915. #elif (TYPE == E_WM_IN)
  3916.    SEND_DOUBLE(e_config->winlist_pos_align_x, E_IPC_OP_WINLIST_POS_ALIGN_X_GET_REPLY, HDL);
  3917. #elif (TYPE == E_REMOTE_IN)
  3918. #endif
  3919. #undef HDL
  3920.  
  3921. /****************************************************************************/
  3922. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_X_GET_REPLY
  3923. #if (TYPE == E_REMOTE_OPTIONS)
  3924. #elif (TYPE == E_REMOTE_OUT)
  3925. #elif (TYPE == E_WM_IN)
  3926. #elif (TYPE == E_REMOTE_IN)
  3927.    START_DOUBLE(val, HDL);
  3928.    printf("REPLY: %3.3f\n", val);
  3929.    END_DOUBLE;
  3930. #endif
  3931. #undef HDL
  3932.  
  3933. /****************************************************************************/
  3934. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_Y_SET
  3935. #if (TYPE == E_REMOTE_OPTIONS)
  3936.    OP("-winlist-pos-align-y-set", 1, "Set winlist position align for y axis (0.0-1.0)", 0, HDL)
  3937. #elif (TYPE == E_REMOTE_OUT)
  3938.    REQ_DOUBLE(atof(params[0]), HDL);
  3939. #elif (TYPE == E_WM_IN)
  3940.    START_DOUBLE(val, HDL);
  3941.    e_config->winlist_pos_align_y = val;
  3942.    E_CONFIG_LIMIT(e_config->winlist_pos_align_y, 0.0, 1.0);
  3943.    SAVE;
  3944.    END_DOUBLE;
  3945. #elif (TYPE == E_REMOTE_IN)
  3946. #endif
  3947. #undef HDL
  3948.  
  3949. /****************************************************************************/
  3950. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_Y_GET
  3951. #if (TYPE == E_REMOTE_OPTIONS)
  3952.    OP("-winlist-pos-align-y-get", 0, "Get winlist position align for y axis", 1, HDL)
  3953. #elif (TYPE == E_REMOTE_OUT)
  3954.    REQ_NULL(HDL);
  3955. #elif (TYPE == E_WM_IN)
  3956.    SEND_DOUBLE(e_config->winlist_pos_align_y, E_IPC_OP_WINLIST_POS_ALIGN_Y_GET_REPLY, HDL);
  3957. #elif (TYPE == E_REMOTE_IN)
  3958. #endif
  3959. #undef HDL
  3960.  
  3961. /****************************************************************************/
  3962. #define HDL E_IPC_OP_WINLIST_POS_ALIGN_Y_GET_REPLY
  3963. #if (TYPE == E_REMOTE_OPTIONS)
  3964. #elif (TYPE == E_REMOTE_OUT)
  3965. #elif (TYPE == E_WM_IN)
  3966. #elif (TYPE == E_REMOTE_IN)
  3967.    START_DOUBLE(val, HDL);
  3968.    printf("REPLY: %3.3f\n", val);
  3969.    END_DOUBLE;
  3970. #endif
  3971. #undef HDL
  3972.  
  3973. /****************************************************************************/
  3974. #define HDL E_IPC_OP_WINLIST_POS_SIZE_W_SET
  3975. #if (TYPE == E_REMOTE_OPTIONS)
  3976.    OP("-winlist-pos-size-w-set", 1, "Set winlist position size width (0.0-1.0)", 0, HDL)
  3977. #elif (TYPE == E_REMOTE_OUT)
  3978.    REQ_DOUBLE(atof(params[0]), HDL);
  3979. #elif (TYPE == E_WM_IN)
  3980.    START_DOUBLE(val, HDL);
  3981.    e_config->winlist_pos_size_w = val;
  3982.    E_CONFIG_LIMIT(e_config->winlist_pos_size_w, 0.0, 1.0);
  3983.    SAVE;
  3984.    END_DOUBLE;
  3985. #elif (TYPE == E_REMOTE_IN)
  3986. #endif
  3987. #undef HDL
  3988.  
  3989. /****************************************************************************/
  3990. #define HDL E_IPC_OP_WINLIST_POS_SIZE_W_GET
  3991. #if (TYPE == E_REMOTE_OPTIONS)
  3992.    OP("-winlist-pos-size-w-get", 0, "Get winlist position size width", 1, HDL)
  3993. #elif (TYPE == E_REMOTE_OUT)
  3994.    REQ_NULL(HDL);
  3995. #elif (TYPE == E_WM_IN)
  3996.    SEND_DOUBLE(e_config->winlist_pos_size_w, E_IPC_OP_WINLIST_POS_SIZE_W_GET_REPLY, HDL);
  3997. #elif (TYPE == E_REMOTE_IN)
  3998. #endif
  3999. #undef HDL
  4000.  
  4001. /****************************************************************************/
  4002. #define HDL E_IPC_OP_WINLIST_POS_SIZE_W_GET_REPLY
  4003. #if (TYPE == E_REMOTE_OPTIONS)
  4004. #elif (TYPE == E_REMOTE_OUT)
  4005. #elif (TYPE == E_WM_IN)
  4006. #elif (TYPE == E_REMOTE_IN)
  4007.    START_DOUBLE(val, HDL);
  4008.    printf("REPLY: %3.3f\n", val);
  4009.    END_DOUBLE;
  4010. #endif
  4011. #undef HDL
  4012.  
  4013. /****************************************************************************/
  4014. #define HDL E_IPC_OP_WINLIST_POS_SIZE_H_SET
  4015. #if (TYPE == E_REMOTE_OPTIONS)
  4016.    OP("-winlist-pos-size-h-set", 1, "Set winlist position size height (0.0-1.0)", 0, HDL)
  4017. #elif (TYPE == E_REMOTE_OUT)
  4018.    REQ_DOUBLE(atof(params[0]), HDL);
  4019. #elif (TYPE == E_WM_IN)
  4020.    START_DOUBLE(val, HDL);
  4021.    e_config->winlist_pos_size_h = val;
  4022.    E_CONFIG_LIMIT(e_config->winlist_pos_size_h, 0.0, 1.0);
  4023.    SAVE;
  4024.    END_DOUBLE;
  4025. #elif (TYPE == E_REMOTE_IN)
  4026. #endif
  4027. #undef HDL
  4028.  
  4029. /****************************************************************************/
  4030. #define HDL E_IPC_OP_WINLIST_POS_SIZE_H_GET
  4031. #if (TYPE == E_REMOTE_OPTIONS)
  4032.    OP("-winlist-pos-size-h-get", 0, "Get winlist position size height", 1, HDL)
  4033. #elif (TYPE == E_REMOTE_OUT)
  4034.    REQ_NULL(HDL);
  4035. #elif (TYPE == E_WM_IN)
  4036.    SEND_DOUBLE(e_config->winlist_pos_size_h, E_IPC_OP_WINLIST_POS_SIZE_H_GET_REPLY, HDL);
  4037. #elif (TYPE == E_REMOTE_IN)
  4038. #endif
  4039. #undef HDL
  4040.  
  4041. /****************************************************************************/
  4042. #define HDL E_IPC_OP_WINLIST_POS_SIZE_H_GET_REPLY
  4043. #if (TYPE == E_REMOTE_OPTIONS)
  4044. #elif (TYPE == E_REMOTE_OUT)
  4045. #elif (TYPE == E_WM_IN)
  4046. #elif (TYPE == E_REMOTE_IN)
  4047.    START_DOUBLE(val, HDL);
  4048.    printf("REPLY: %3.3f\n", val);
  4049.    END_DOUBLE;
  4050. #endif
  4051. #undef HDL
  4052.  
  4053. /****************************************************************************/
  4054.  
  4055. #define HDL E_IPC_OP_WINLIST_POS_MIN_W_SET
  4056. #if (TYPE == E_REMOTE_OPTIONS)
  4057.    OP("-winlist-pos-min-w-set", 1, "Set winlist (alt+tab) minimum width", 0, HDL)
  4058. #elif (TYPE == E_REMOTE_OUT)
  4059.    REQ_INT(atoi(params[0]), HDL);
  4060. #elif (TYPE == E_WM_IN)
  4061.    START_INT(val, HDL);
  4062.    e_config->winlist_pos_min_w = val;
  4063.    E_CONFIG_LIMIT(e_config->winlist_pos_min_w, 0, 4000);
  4064.    SAVE;
  4065.    END_INT;
  4066. #elif (TYPE == E_REMOTE_IN)
  4067. #endif
  4068. #undef HDL
  4069.  
  4070. /****************************************************************************/
  4071. #define HDL E_IPC_OP_WINLIST_POS_MIN_W_GET
  4072. #if (TYPE == E_REMOTE_OPTIONS)
  4073.    OP("-winlist-pos-min-w-get", 0, "Get winlist (alt+tab) minimum width", 1, HDL)
  4074. #elif (TYPE == E_REMOTE_OUT)
  4075.    REQ_NULL(HDL);
  4076. #elif (TYPE == E_WM_IN)
  4077.    SEND_INT(e_config->winlist_pos_min_w, E_IPC_OP_WINLIST_POS_MIN_W_GET_REPLY, HDL);
  4078. #elif (TYPE == E_REMOTE_IN)
  4079. #endif
  4080. #undef HDL
  4081.  
  4082. /****************************************************************************/
  4083. #define HDL E_IPC_OP_WINLIST_POS_MIN_W_GET_REPLY
  4084. #if (TYPE == E_REMOTE_OPTIONS)
  4085. #elif (TYPE == E_REMOTE_OUT)
  4086. #elif (TYPE == E_WM_IN)
  4087. #elif (TYPE == E_REMOTE_IN)
  4088.    START_INT(val, HDL);
  4089.    printf("REPLY: %d\n", val);
  4090.    END_INT;
  4091. #endif
  4092. #undef HDL
  4093.  
  4094. /****************************************************************************/
  4095.  
  4096. #define HDL E_IPC_OP_WINLIST_POS_MIN_H_SET
  4097. #if (TYPE == E_REMOTE_OPTIONS)
  4098.    OP("-winlist-pos-min-h-set", 1, "Set winlist (alt+tab) minimum height", 0, HDL)
  4099. #elif (TYPE == E_REMOTE_OUT)
  4100.    REQ_INT(atoi(params[0]), HDL);
  4101. #elif (TYPE == E_WM_IN)
  4102.    START_INT(val, HDL);
  4103.    e_config->winlist_pos_min_h = val;
  4104.    E_CONFIG_LIMIT(e_config->winlist_pos_min_h, 0, 4000);
  4105.    SAVE;
  4106.    END_INT;
  4107. #elif (TYPE == E_REMOTE_IN)
  4108. #endif
  4109. #undef HDL
  4110.  
  4111. /****************************************************************************/
  4112. #define HDL E_IPC_OP_WINLIST_POS_MIN_H_GET
  4113. #if (TYPE == E_REMOTE_OPTIONS)
  4114.    OP("-winlist-pos-min-h-get", 0, "Get winlist (alt+tab) minimum height", 1, HDL)
  4115. #elif (TYPE == E_REMOTE_OUT)
  4116.    REQ_NULL(HDL);
  4117. #elif (TYPE == E_WM_IN)
  4118.    SEND_INT(e_config->winlist_pos_min_h, E_IPC_OP_WINLIST_POS_MIN_H_GET_REPLY, HDL);
  4119. #elif (TYPE == E_REMOTE_IN)
  4120. #endif
  4121. #undef HDL
  4122.  
  4123. /****************************************************************************/
  4124. #define HDL E_IPC_OP_WINLIST_POS_MIN_H_GET_REPLY
  4125. #if (TYPE == E_REMOTE_OPTIONS)
  4126. #elif (TYPE == E_REMOTE_OUT)
  4127. #elif (TYPE == E_WM_IN)
  4128. #elif (TYPE == E_REMOTE_IN)
  4129.    START_INT(val, HDL);
  4130.    printf("REPLY: %d\n", val);
  4131.    END_INT;
  4132. #endif
  4133. #undef HDL
  4134.  
  4135. /****************************************************************************/
  4136.  
  4137. #define HDL E_IPC_OP_WINLIST_POS_MAX_W_SET
  4138. #if (TYPE == E_REMOTE_OPTIONS)
  4139.    OP("-winlist-pos-max-w-set", 1, "Set winlist (alt+tab) maximum width", 0, HDL)
  4140. #elif (TYPE == E_REMOTE_OUT)
  4141.    REQ_INT(atoi(params[0]), HDL);
  4142. #elif (TYPE == E_WM_IN)
  4143.    START_INT(val, HDL);
  4144.    e_config->winlist_pos_max_w = val;
  4145.    E_CONFIG_LIMIT(e_config->winlist_pos_max_w, 8, 4000);
  4146.    SAVE;
  4147.    END_INT;
  4148. #elif (TYPE == E_REMOTE_IN)
  4149. #endif
  4150. #undef HDL
  4151.  
  4152. /****************************************************************************/
  4153. #define HDL E_IPC_OP_WINLIST_POS_MAX_W_GET
  4154. #if (TYPE == E_REMOTE_OPTIONS)
  4155.    OP("-winlist-pos-max-w-get", 0, "Get winlist (alt+tab) maximum width", 1, HDL)
  4156. #elif (TYPE == E_REMOTE_OUT)
  4157.    REQ_NULL(HDL);
  4158. #elif (TYPE == E_WM_IN)
  4159.    SEND_INT(e_config->winlist_pos_max_w, E_IPC_OP_WINLIST_POS_MAX_W_GET_REPLY, HDL);
  4160. #elif (TYPE == E_REMOTE_IN)
  4161. #endif
  4162. #undef HDL
  4163.  
  4164. /****************************************************************************/
  4165. #define HDL E_IPC_OP_WINLIST_POS_MAX_W_GET_REPLY
  4166. #if (TYPE == E_REMOTE_OPTIONS)
  4167. #elif (TYPE == E_REMOTE_OUT)
  4168. #elif (TYPE == E_WM_IN)
  4169. #elif (TYPE == E_REMOTE_IN)
  4170.    START_INT(val, HDL);
  4171.    printf("REPLY: %d\n", val);
  4172.    END_INT;
  4173. #endif
  4174. #undef HDL
  4175.  
  4176. /****************************************************************************/
  4177.  
  4178. #define HDL E_IPC_OP_WINLIST_POS_MAX_H_SET
  4179. #if (TYPE == E_REMOTE_OPTIONS)
  4180.    OP("-winlist-pos-max-h-set", 1, "Set winlist (alt+tab) maximum height", 0, HDL)
  4181. #elif (TYPE == E_REMOTE_OUT)
  4182.    REQ_INT(atoi(params[0]), HDL);
  4183. #elif (TYPE == E_WM_IN)
  4184.    START_INT(val, HDL);
  4185.    e_config->winlist_pos_max_h = val;
  4186.    E_CONFIG_LIMIT(e_config->winlist_pos_max_h, 8, 4000);
  4187.    SAVE;
  4188.    END_INT;
  4189. #elif (TYPE == E_REMOTE_IN)
  4190. #endif
  4191. #undef HDL
  4192.  
  4193. /****************************************************************************/
  4194. #define HDL E_IPC_OP_WINLIST_POS_MAX_H_GET
  4195. #if (TYPE == E_REMOTE_OPTIONS)
  4196.    OP("-winlist-pos-max-h-get", 0, "Get winlist (alt+tab) maximum height", 1, HDL)
  4197. #elif (TYPE == E_REMOTE_OUT)
  4198.    REQ_NULL(HDL);
  4199. #elif (TYPE == E_WM_IN)
  4200.    SEND_INT(e_config->winlist_pos_max_h, E_IPC_OP_WINLIST_POS_MAX_H_GET_REPLY, HDL);
  4201. #elif (TYPE == E_REMOTE_IN)
  4202. #endif
  4203. #undef HDL
  4204.  
  4205. /****************************************************************************/
  4206. #define HDL E_IPC_OP_WINLIST_POS_MAX_H_GET_REPLY
  4207. #if (TYPE == E_REMOTE_OPTIONS)
  4208. #elif (TYPE == E_REMOTE_OUT)
  4209. #elif (TYPE == E_WM_IN)
  4210. #elif (TYPE == E_REMOTE_IN)
  4211.    START_INT(val, HDL);
  4212.    printf("REPLY: %d\n", val);
  4213.    END_INT;
  4214. #endif
  4215. #undef HDL
  4216.  
  4217. /****************************************************************************/
  4218.  
  4219. #define HDL E_IPC_OP_KILL_IF_CLOSE_NOT_POSSIBLE_SET
  4220. #if (TYPE == E_REMOTE_OPTIONS)
  4221.    OP("-kill-if-close-not-possible-set", 1, "Set whether E should kill an application if it can not close", 0, HDL)
  4222. #elif (TYPE == E_REMOTE_OUT)
  4223.    REQ_INT(atoi(params[0]), HDL);
  4224. #elif (TYPE == E_WM_IN)
  4225.    START_INT(val, HDL);
  4226.    e_config->kill_if_close_not_possible = val;
  4227.    E_CONFIG_LIMIT(e_config->kill_if_close_not_possible, 0, 1);
  4228.    SAVE;
  4229.    END_INT;
  4230. #elif (TYPE == E_REMOTE_IN)
  4231. #endif
  4232. #undef HDL
  4233.  
  4234. /****************************************************************************/
  4235. #define HDL E_IPC_OP_KILL_IF_CLOSE_NOT_POSSIBLE_GET
  4236. #if (TYPE == E_REMOTE_OPTIONS)
  4237.    OP("-kill-if-close-not-possible-get", 0, "Get whether E should kill an application if it can not close", 1, HDL)
  4238. #elif (TYPE == E_REMOTE_OUT)
  4239.    REQ_NULL(HDL);
  4240. #elif (TYPE == E_WM_IN)
  4241.    SEND_INT(e_config->kill_if_close_not_possible, E_IPC_OP_KILL_IF_CLOSE_NOT_POSSIBLE_GET_REPLY, HDL);
  4242. #elif (TYPE == E_REMOTE_IN)
  4243. #endif
  4244. #undef HDL
  4245.  
  4246. /****************************************************************************/
  4247. #define HDL E_IPC_OP_KILL_IF_CLOSE_NOT_POSSIBLE_GET_REPLY
  4248. #if (TYPE == E_REMOTE_OPTIONS)
  4249. #elif (TYPE == E_REMOTE_OUT)
  4250. #elif (TYPE == E_WM_IN)
  4251. #elif (TYPE == E_REMOTE_IN)
  4252.    START_INT(val, HDL);
  4253.    printf("REPLY: KILL=%d\n", val);
  4254.    END_INT;
  4255. #endif
  4256. #undef HDL
  4257.  
  4258. /****************************************************************************/
  4259.  
  4260. #define HDL E_IPC_OP_KILL_PROCESS_SET
  4261. #if (TYPE == E_REMOTE_OPTIONS)
  4262.    OP("-kill-process-set", 1, "Set whether E should kill the process directly or through x", 0, HDL)
  4263. #elif (TYPE == E_REMOTE_OUT)
  4264.    REQ_INT(atoi(params[0]), HDL);
  4265. #elif (TYPE == E_WM_IN)
  4266.    START_INT(val, HDL);
  4267.    e_config->kill_process = val;
  4268.    E_CONFIG_LIMIT(e_config->kill_process, 0, 1);
  4269.    SAVE;
  4270.    END_INT;
  4271. #elif (TYPE == E_REMOTE_IN)
  4272. #endif
  4273. #undef HDL
  4274.  
  4275. /****************************************************************************/
  4276. #define HDL E_IPC_OP_KILL_PROCESS_GET
  4277. #if (TYPE == E_REMOTE_OPTIONS)
  4278.    OP("-kill-process-get", 0, "Get whether E should kill the process directly or through x", 1, HDL)
  4279. #elif (TYPE == E_REMOTE_OUT)
  4280.    REQ_NULL(HDL);
  4281. #elif (TYPE == E_WM_IN)
  4282.    SEND_INT(e_config->kill_process, E_IPC_OP_KILL_PROCESS_GET_REPLY, HDL);
  4283. #elif (TYPE == E_REMOTE_IN)
  4284. #endif
  4285. #undef HDL
  4286.  
  4287. /****************************************************************************/
  4288. #define HDL E_IPC_OP_KILL_PROCESS_GET_REPLY
  4289. #if (TYPE == E_REMOTE_OPTIONS)
  4290. #elif (TYPE == E_REMOTE_OUT)
  4291. #elif (TYPE == E_WM_IN)
  4292. #elif (TYPE == E_REMOTE_IN)
  4293.    START_INT(val, HDL);
  4294.    printf("REPLY: KILL=%d\n", val);
  4295.    END_INT;
  4296. #endif
  4297. #undef HDL
  4298.  
  4299. /****************************************************************************/
  4300. #define HDL E_IPC_OP_KILL_TIMER_WAIT_SET
  4301. #if (TYPE == E_REMOTE_OPTIONS)
  4302.    OP("-kill-timer-wait-set", 1, "Set interval to wait before killing client (0.0-120.0)", 0, HDL)
  4303. #elif (TYPE == E_REMOTE_OUT)
  4304.    REQ_DOUBLE(atof(params[0]), HDL);
  4305. #elif (TYPE == E_WM_IN)
  4306.    START_DOUBLE(val, HDL);
  4307.    e_config->kill_timer_wait = val;
  4308.    E_CONFIG_LIMIT(e_config->kill_timer_wait, 0.0, 120.0);
  4309.    SAVE;
  4310.    END_DOUBLE;
  4311. #elif (TYPE == E_REMOTE_IN)
  4312. #endif
  4313. #undef HDL
  4314.  
  4315. /****************************************************************************/
  4316. #define HDL E_IPC_OP_KILL_TIMER_WAIT_GET
  4317. #if (TYPE == E_REMOTE_OPTIONS)
  4318.    OP("-kill-timer-wait-get", 0, "Get interval to wait before killing client", 1, HDL)
  4319. #elif (TYPE == E_REMOTE_OUT)
  4320.    REQ_NULL(HDL);
  4321. #elif (TYPE == E_WM_IN)
  4322.    SEND_DOUBLE(e_config->kill_timer_wait, E_IPC_OP_KILL_TIMER_WAIT_GET_REPLY, HDL);
  4323. #elif (TYPE == E_REMOTE_IN)
  4324. #endif
  4325. #undef HDL
  4326.  
  4327. /****************************************************************************/
  4328. #define HDL E_IPC_OP_KILL_TIMER_WAIT_GET_REPLY
  4329. #if (TYPE == E_REMOTE_OPTIONS)
  4330. #elif (TYPE == E_REMOTE_OUT)
  4331. #elif (TYPE == E_WM_IN)
  4332. #elif (TYPE == E_REMOTE_IN)
  4333.    START_DOUBLE(val, HDL);
  4334.    printf("REPLY: %3.3f\n", val);
  4335.    END_DOUBLE;
  4336. #endif
  4337. #undef HDL
  4338.  
  4339.  
  4340. /****************************************************************************/
  4341.  
  4342. #define HDL E_IPC_OP_PING_CLIENTS_SET
  4343. #if (TYPE == E_REMOTE_OPTIONS)
  4344.    OP("-ping-clients-set", 1, "Set whether E should ping clients", 0, HDL)
  4345. #elif (TYPE == E_REMOTE_OUT)
  4346.    REQ_INT(atoi(params[0]), HDL);
  4347. #elif (TYPE == E_WM_IN)
  4348.    START_INT(val, HDL);
  4349.    e_config->ping_clients = val;
  4350.    E_CONFIG_LIMIT(e_config->ping_clients, 0, 1);
  4351.    SAVE;
  4352.    END_INT;
  4353. #elif (TYPE == E_REMOTE_IN)
  4354. #endif
  4355. #undef HDL
  4356.  
  4357. /****************************************************************************/
  4358. #define HDL E_IPC_OP_PING_CLIENTS_GET
  4359. #if (TYPE == E_REMOTE_OPTIONS)
  4360.    OP("-ping-clients-get", 0, "Get whether E should ping clients", 1, HDL)
  4361. #elif (TYPE == E_REMOTE_OUT)
  4362.    REQ_NULL(HDL);
  4363. #elif (TYPE == E_WM_IN)
  4364.    SEND_INT(e_config->ping_clients, E_IPC_OP_PING_CLIENTS_GET_REPLY, HDL);
  4365. #elif (TYPE == E_REMOTE_IN)
  4366. #endif
  4367. #undef HDL
  4368.  
  4369. /****************************************************************************/
  4370. #define HDL E_IPC_OP_PING_CLIENTS_GET_REPLY
  4371. #if (TYPE == E_REMOTE_OPTIONS)
  4372. #elif (TYPE == E_REMOTE_OUT)
  4373. #elif (TYPE == E_WM_IN)
  4374. #elif (TYPE == E_REMOTE_IN)
  4375.    START_INT(val, HDL);
  4376.    printf("REPLY: %d\n", val);
  4377.    END_INT;
  4378. #endif
  4379. #undef HDL
  4380.  
  4381. /****************************************************************************/
  4382. #define HDL E_IPC_OP_PING_CLIENTS_WAIT_SET
  4383. #if (TYPE == E_REMOTE_OPTIONS)
  4384.    OP("-ping-clients-wait-set", 1, "Set client ping interval (0.0-120.0)", 0, HDL)
  4385. #elif (TYPE == E_REMOTE_OUT)
  4386.    REQ_DOUBLE(atof(params[0]), HDL);
  4387. #elif (TYPE == E_WM_IN)
  4388.    START_DOUBLE(val, HDL);
  4389.    e_config->ping_clients_wait = val;
  4390.    E_CONFIG_LIMIT(e_config->ping_clients_wait, 0.0, 120.0);
  4391.    SAVE;
  4392.    END_DOUBLE;
  4393. #elif (TYPE == E_REMOTE_IN)
  4394. #endif
  4395. #undef HDL
  4396.  
  4397. /****************************************************************************/
  4398. #define HDL E_IPC_OP_PING_CLIENTS_WAIT_GET
  4399. #if (TYPE == E_REMOTE_OPTIONS)
  4400.    OP("-ping-clients-wait-get", 0, "Get client ping interval", 1, HDL)
  4401. #elif (TYPE == E_REMOTE_OUT)
  4402.    REQ_NULL(HDL);
  4403. #elif (TYPE == E_WM_IN)
  4404.    SEND_DOUBLE(e_config->ping_clients_wait, E_IPC_OP_PING_CLIENTS_WAIT_GET_REPLY, HDL);
  4405. #elif (TYPE == E_REMOTE_IN)
  4406. #endif
  4407. #undef HDL
  4408.  
  4409. /****************************************************************************/
  4410. #define HDL E_IPC_OP_PING_CLIENTS_WAIT_GET_REPLY
  4411. #if (TYPE == E_REMOTE_OPTIONS)
  4412. #elif (TYPE == E_REMOTE_OUT)
  4413. #elif (TYPE == E_WM_IN)
  4414. #elif (TYPE == E_REMOTE_IN)
  4415.    START_DOUBLE(val, HDL);
  4416.    printf("REPLY: %3.3f\n", val);
  4417.    END_DOUBLE;
  4418. #endif
  4419. #undef HDL
  4420.  
  4421. /****************************************************************************/
  4422. #define HDL E_IPC_OP_TRANSITION_START_SET
  4423. #if (TYPE == E_REMOTE_OPTIONS)
  4424.    OP("-transition-start-set", 1, "Get the background transition used when E starts", 0, HDL)
  4425. #elif (TYPE == E_REMOTE_OUT)
  4426.    REQ_STRING(params[0], HDL);
  4427. #elif (TYPE == E_WM_IN)
  4428.    STRING(s, HDL);
  4429.    if (!s)
  4430.      {
  4431.     if (e_config->transition_start) evas_stringshare_del(e_config->transition_start);
  4432.     e_config->transition_start = NULL;
  4433.      }
  4434.    if ((s) && (e_theme_transition_find(s)))
  4435.      {
  4436.     if (e_config->transition_start) evas_stringshare_del(e_config->transition_start);
  4437.     e_config->transition_start = NULL;
  4438.     if (s) e_config->transition_start = evas_stringshare_add(s);
  4439.     SAVE;
  4440.      }
  4441.    END_STRING(s);
  4442. #elif (TYPE == E_REMOTE_IN)
  4443. #endif
  4444. #undef HDL
  4445.      
  4446. /****************************************************************************/
  4447. #define HDL E_IPC_OP_TRANSITION_START_GET
  4448. #if (TYPE == E_REMOTE_OPTIONS)
  4449.    OP("-transition-start-get", 0, "Get the background transition used when E starts", 1, HDL)
  4450. #elif (TYPE == E_REMOTE_OUT)
  4451.    REQ_NULL(HDL);
  4452. #elif (TYPE == E_WM_IN)
  4453.    SEND_STRING(e_config->transition_start, E_IPC_OP_TRANSITION_START_GET_REPLY, HDL);
  4454. #elif (TYPE == E_REMOTE_IN)
  4455. #endif
  4456. #undef HDL
  4457.      
  4458. /****************************************************************************/
  4459. #define HDL E_IPC_OP_TRANSITION_START_GET_REPLY
  4460. #if (TYPE == E_REMOTE_OPTIONS)
  4461. #elif (TYPE == E_REMOTE_OUT)
  4462. #elif (TYPE == E_WM_IN)
  4463. #elif (TYPE == E_REMOTE_IN)
  4464.    STRING(s, HDL);
  4465.    printf("REPLY: \"%s\"\n", s);
  4466.    END_STRING(s);
  4467. #elif (TYPE == E_LIB_IN)
  4468. #endif
  4469. #undef HDL
  4470.  
  4471. /****************************************************************************/
  4472. #define HDL E_IPC_OP_TRANSITION_DESK_SET
  4473. #if (TYPE == E_REMOTE_OPTIONS)
  4474.    OP("-transition-desk-set", 1, "Set the transition used when switching desktops", 0, HDL)
  4475. #elif (TYPE == E_REMOTE_OUT)
  4476.    REQ_STRING(params[0], HDL);
  4477. #elif (TYPE == E_WM_IN)
  4478.    STRING(s, HDL);
  4479.    if (!s)
  4480.      {
  4481.     if (e_config->transition_desk) evas_stringshare_del(e_config->transition_desk);
  4482.     e_config->transition_desk = NULL;
  4483.      }
  4484.    if ((s) && (e_theme_transition_find(s)))
  4485.      {
  4486.     if (e_config->transition_desk) evas_stringshare_del(e_config->transition_desk);
  4487.     e_config->transition_desk = NULL;
  4488.     if (s) e_config->transition_desk = evas_stringshare_add(s);
  4489.      }
  4490.    SAVE;
  4491.    END_STRING(s);
  4492. #elif (TYPE == E_REMOTE_IN)
  4493. #endif
  4494. #undef HDL
  4495.      
  4496. /****************************************************************************/
  4497. #define HDL E_IPC_OP_TRANSITION_DESK_GET
  4498. #if (TYPE == E_REMOTE_OPTIONS)
  4499.    OP("-transition-desk-get", 0, "Get the transition used when switching desktops", 1, HDL)
  4500. #elif (TYPE == E_REMOTE_OUT)
  4501.    REQ_NULL(HDL);
  4502. #elif (TYPE == E_WM_IN)
  4503.    SEND_STRING(e_config->transition_desk, E_IPC_OP_TRANSITION_DESK_GET_REPLY, HDL);
  4504. #elif (TYPE == E_REMOTE_IN)
  4505. #endif
  4506. #undef HDL
  4507.      
  4508. /****************************************************************************/
  4509. #define HDL E_IPC_OP_TRANSITION_DESK_GET_REPLY
  4510. #if (TYPE == E_REMOTE_OPTIONS)
  4511. #elif (TYPE == E_REMOTE_OUT)
  4512. #elif (TYPE == E_WM_IN)
  4513. #elif (TYPE == E_REMOTE_IN)
  4514.    STRING(s, HDL);
  4515.    printf("REPLY: \"%s\"\n", s);
  4516.    END_STRING(s);
  4517. #elif (TYPE == E_LIB_IN)
  4518. #endif
  4519. #undef HDL
  4520.  
  4521. /****************************************************************************/
  4522. #define HDL E_IPC_OP_TRANSITION_CHANGE_SET
  4523. #if (TYPE == E_REMOTE_OPTIONS)
  4524.    OP("-transition-change-set", 1, "Set the transition used when changing backgrounds", 0, HDL)
  4525. #elif (TYPE == E_REMOTE_OUT)
  4526.    REQ_STRING(params[0], HDL);
  4527. #elif (TYPE == E_WM_IN)
  4528.    STRING(s, HDL);
  4529.    if (!s)
  4530.      {
  4531.     if (e_config->transition_change) evas_stringshare_del(e_config->transition_change);
  4532.     e_config->transition_change = NULL;
  4533.      }
  4534.    if ((s) && (e_theme_transition_find(s)))
  4535.      {
  4536.     if (e_config->transition_change) evas_stringshare_del(e_config->transition_change);
  4537.     e_config->transition_change = NULL;
  4538.     if (s) e_config->transition_change = evas_stringshare_add(s);
  4539.            SAVE;
  4540.      }
  4541.    END_STRING(s);
  4542. #elif (TYPE == E_REMOTE_IN)
  4543. #endif
  4544. #undef HDL
  4545.      
  4546. /****************************************************************************/
  4547. #define HDL E_IPC_OP_TRANSITION_CHANGE_GET
  4548. #if (TYPE == E_REMOTE_OPTIONS)
  4549.    OP("-transition-change-get", 0, "Get the transition used when changing backgrounds", 1, HDL)
  4550. #elif (TYPE == E_REMOTE_OUT)
  4551.    REQ_NULL(HDL);
  4552. #elif (TYPE == E_WM_IN)
  4553.    SEND_STRING(e_config->transition_change, E_IPC_OP_TRANSITION_CHANGE_GET_REPLY, HDL);
  4554. #elif (TYPE == E_REMOTE_IN)
  4555. #endif
  4556. #undef HDL
  4557.      
  4558. /****************************************************************************/
  4559. #define HDL E_IPC_OP_TRANSITION_CHANGE_GET_REPLY
  4560. #if (TYPE == E_REMOTE_OPTIONS)
  4561. #elif (TYPE == E_REMOTE_OUT)
  4562. #elif (TYPE == E_WM_IN)
  4563. #elif (TYPE == E_REMOTE_IN)
  4564.    STRING(s, HDL);
  4565.    printf("REPLY: \"%s\"\n", s);
  4566.    END_STRING(s);
  4567. #endif
  4568. #undef HDL
  4569.  
  4570. /****************************************************************************/
  4571. #define HDL E_IPC_OP_FOCUS_SETTING_SET
  4572. #if (TYPE == E_REMOTE_OPTIONS)
  4573.    OP("-focus-setting-set", 1, "Set the focus setting policy (\"NONE\", \"NEW_WINDOW\", \"NEW_DIALOG\", \"NEW_DIALOG_IF_OWNER_FOCUSED\")", 0, HDL)
  4574. #elif (TYPE == E_REMOTE_OUT)
  4575.    REQ_INT_START(HDL)
  4576.    int value = 0;
  4577.    if (!strcmp(params[0], "NONE")) value = E_FOCUS_NONE;
  4578.    else if (!strcmp(params[0], "NEW_WINDOW")) value = E_FOCUS_NEW_WINDOW;
  4579.    else if (!strcmp(params[0], "NEW_DIALOG")) value = E_FOCUS_NEW_DIALOG;
  4580.    else if (!strcmp(params[0], "NEW_DIALOG_IF_OWNER_FOCUSED")) value = E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED;
  4581.    else
  4582.      {
  4583.      printf("focus setting must be \"NONE\", \"NEW_WINDOW\", \"NEW_DIALOG\", \"NEW_DIALOG_IF_OWNER_FOCUSED\"\n");
  4584.      exit(-1);
  4585.      }
  4586.    REQ_INT_END(value, HDL);
  4587. #elif (TYPE == E_WM_IN)
  4588.    START_INT(value, HDL);
  4589.    e_border_button_bindings_ungrab_all();
  4590.    e_config->focus_setting = value;
  4591.    E_CONFIG_LIMIT(e_config->focus_setting, 0, 3);
  4592.    e_border_button_bindings_grab_all();
  4593.    SAVE;
  4594.    END_INT
  4595. #elif (TYPE == E_REMOTE_IN)
  4596. #endif
  4597. #undef HDL
  4598.      
  4599. /****************************************************************************/
  4600. #define HDL E_IPC_OP_FOCUS_SETTING_GET
  4601. #if (TYPE == E_REMOTE_OPTIONS)
  4602.    OP("-focus-setting-get", 0, "Get the focus setting policy", 1, HDL)
  4603. #elif (TYPE == E_REMOTE_OUT)
  4604.    REQ_NULL(HDL);
  4605. #elif (TYPE == E_WM_IN)
  4606.    SEND_INT(e_config->focus_setting, E_IPC_OP_FOCUS_SETTING_GET_REPLY, HDL);
  4607. #elif (TYPE == E_REMOTE_IN)
  4608. #endif
  4609. #undef HDL
  4610.      
  4611. /****************************************************************************/
  4612. #define HDL E_IPC_OP_FOCUS_SETTING_GET_REPLY
  4613. #if (TYPE == E_REMOTE_OPTIONS)
  4614. #elif (TYPE == E_REMOTE_OUT)
  4615. #elif (TYPE == E_WM_IN)
  4616. #elif (TYPE == E_REMOTE_IN)
  4617.    START_INT(setting, HDL);
  4618.    if (setting == E_FOCUS_NONE)
  4619.      printf("REPLY: NONE\n");
  4620.    else if (setting == E_FOCUS_NEW_WINDOW)
  4621.      printf("REPLY: NEW_WINDOW\n");
  4622.    else if (setting == E_FOCUS_NEW_DIALOG)
  4623.      printf("REPLY: NEW_DIALOG\n");
  4624.    else if (setting == E_FOCUS_NEW_DIALOG_IF_OWNER_FOCUSED)
  4625.      printf("REPLY: NEW_DIALOG_IF_OWNER_FOCUSED\n");
  4626.    END_INT
  4627. #endif
  4628. #undef HDL
  4629.  
  4630. /****************************************************************************/
  4631. #define HDL E_IPC_OP_EXEC_ACTION
  4632. #if (TYPE == E_REMOTE_OPTIONS)
  4633.     OP("-exec-action", 2, "Executes an action given the name (OPT1) and a string of parameters (OPT2).", 0, HDL)
  4634. #elif (TYPE == E_REMOTE_OUT)
  4635.     REQ_2STRING(params[0], params[1], HDL);
  4636. #elif (TYPE == E_WM_IN)
  4637.     STRING2(actionName, paramList, e_2str, HDL);
  4638.     {
  4639.         Evas_List *m;
  4640.         E_Manager *man;
  4641.         E_Action
  4642.             *act
  4643.         ;
  4644.  
  4645.         man = NULL;
  4646.  
  4647.         m = e_manager_list();
  4648.         if (m) {
  4649.             man = m->data;
  4650.  
  4651.             if (man) {
  4652.                 act = e_action_find(actionName);
  4653.  
  4654.                 if (act && act->func.go) {
  4655.                     act->func.go(E_OBJECT(man), paramList);
  4656.                 }
  4657.             }
  4658.         }
  4659.     }
  4660.     END_STRING2(e_2str)
  4661. #elif (TYPE == E_REMOTE_IN)
  4662. #endif
  4663. #undef HDL
  4664.  
  4665. /****************************************************************************/
  4666. #define HDL E_IPC_OP_THEME_LIST
  4667. #if (TYPE == E_REMOTE_OPTIONS)
  4668.    OP("-theme-list", 0, "List themes and associated categories", 1, HDL)
  4669. #elif (TYPE == E_REMOTE_OUT)
  4670.    REQ_NULL(HDL);
  4671. #elif (TYPE == E_WM_IN)
  4672.    SEND_STRING2_LIST(e_config->themes, E_Config_Theme, theme, v, HDL);
  4673.    v->str1 = theme->category;
  4674.    v->str2 = theme->file;
  4675.    END_SEND_STRING2_LIST(v, E_IPC_OP_THEME_LIST_REPLY);
  4676. #elif (TYPE == E_REMOTE_IN)
  4677. #endif
  4678. #undef HDL
  4679.     
  4680. /****************************************************************************/
  4681. #define HDL E_IPC_OP_THEME_LIST_REPLY
  4682. #if (TYPE == E_REMOTE_OPTIONS)
  4683. #elif (TYPE == E_REMOTE_OUT)
  4684. #elif (TYPE == E_WM_IN)
  4685. #elif (TYPE == E_REMOTE_IN)
  4686.    STRING2_LIST(v, HDL);
  4687.    printf("REPLY: CATEGORY=\"%s\" FILE=\"%s\"\n", v->str1, v->str2);
  4688.    END_STRING2_LIST(v);
  4689. #endif
  4690. #undef HDL
  4691.      
  4692. /****************************************************************************/
  4693.  
  4694. #define HDL E_IPC_OP_THEME_SET
  4695. #if (TYPE == E_REMOTE_OPTIONS)
  4696.    OP("-theme-set", 2, "Set theme category (OPT1) and edje file (OPT2)", 0, HDL)
  4697. #elif (TYPE == E_REMOTE_OUT)
  4698.    REQ_2STRING(params[0], params[1], HDL) 
  4699. #elif (TYPE == E_WM_IN)
  4700.    STRING2(category, file, e_2str, HDL);
  4701.    /* TODO: Check if category is sane and file exists */
  4702.    e_theme_config_set(category, file);
  4703.    SAVE;   
  4704.    END_STRING2(e_2str);
  4705. #elif (TYPE == E_REMOTE_IN)
  4706. #endif
  4707. #undef HDL
  4708.  
  4709. /****************************************************************************/
  4710. #define HDL E_IPC_OP_THEME_GET
  4711. #if (TYPE == E_REMOTE_OPTIONS)
  4712.    OP("-theme-get", 1, "List the theme associated with the category OPT1", 1, HDL)
  4713. #elif (TYPE == E_REMOTE_OUT)
  4714.    REQ_STRING(params[0], HDL);
  4715. #elif (TYPE == E_WM_IN)
  4716.    STRING(category, HDL);
  4717.    E_Config_Theme *ect;
  4718.    void *data;
  4719.    int bytes;
  4720.    
  4721.    ect = e_theme_config_get(category);
  4722.    if (ect == NULL)
  4723.      data = NULL;
  4724.    else
  4725.      data = e_ipc_codec_2str_enc(ect->category, ect->file, &bytes);
  4726.       
  4727.    SEND_DATA(E_IPC_OP_THEME_GET_REPLY);
  4728.  
  4729.    END_STRING(category);
  4730. #elif (TYPE == E_REMOTE_IN)
  4731. #endif
  4732. #undef HDL
  4733.  
  4734. /****************************************************************************/
  4735. #define HDL E_IPC_OP_THEME_GET_REPLY
  4736. #if (TYPE == E_REMOTE_OPTIONS)
  4737. #elif (TYPE == E_REMOTE_OUT)
  4738. #elif (TYPE == E_WM_IN)
  4739. #elif (TYPE == E_REMOTE_IN)
  4740.    STRING2(category, file, e_2str, HDL);
  4741.    printf("REPLY: DEFAULT CATEGORY=\"%s\" FILE=\"%s\"\n",
  4742.                     category, file); 
  4743.    END_STRING2(e_2str);
  4744. #elif (TYPE == E_LIB_IN)
  4745.    STRING2(category, file, e_2str, HDL);
  4746.    RESPONSE(r, E_Response_Theme_Get);
  4747.    if (file) r->file = strdup(file);
  4748.    r->category = strdup(category);
  4749.    END_RESPONSE(r, E_RESPONSE_THEME_GET);
  4750.    END_STRING2(e_2str);
  4751. #endif
  4752. #undef HDL
  4753.  
  4754. /****************************************************************************/
  4755. #define HDL E_IPC_OP_THEME_REMOVE
  4756. #if (TYPE == E_REMOTE_OPTIONS)
  4757.    OP("-theme-remove", 1, "Remove the theme category OPT1", 0, HDL)
  4758. #elif (TYPE == E_REMOTE_OUT)
  4759.    REQ_STRING(params[0], HDL);
  4760. #elif (TYPE == E_WM_IN)
  4761.    STRING(category, HDL);
  4762.    e_theme_config_remove(category);
  4763.    SAVE;
  4764.    END_STRING(category);
  4765. #elif (TYPE == E_REMOTE_IN)
  4766. #endif
  4767. #undef HDL
  4768.  
  4769. /****************************************************************************/
  4770.  
  4771. #define HDL E_IPC_OP_MOVE_INFO_FOLLOWS_SET
  4772. #if (TYPE == E_REMOTE_OPTIONS)
  4773.    OP("-move-info-follows-set", 1, "Set whether the move dialog should follow the client window", 0, HDL)
  4774. #elif (TYPE == E_REMOTE_OUT)
  4775.    REQ_INT(atoi(params[0]), HDL);
  4776. #elif (TYPE == E_WM_IN)
  4777.    START_INT(val, HDL);
  4778.    e_config->move_info_follows = val;
  4779.    E_CONFIG_LIMIT(e_config->move_info_follows, 0, 1);
  4780.    SAVE;
  4781.    END_INT;
  4782. #elif (TYPE == E_REMOTE_IN)
  4783. #endif
  4784. #undef HDL
  4785.  
  4786. /****************************************************************************/
  4787. #define HDL E_IPC_OP_MOVE_INFO_FOLLOWS_GET
  4788. #if (TYPE == E_REMOTE_OPTIONS)
  4789.    OP("-move-info-follows-get", 0, "Get whether the move dialog should follow the client window", 1, HDL)
  4790. #elif (TYPE == E_REMOTE_OUT)
  4791.    REQ_NULL(HDL);
  4792. #elif (TYPE == E_WM_IN)
  4793.    SEND_INT(e_config->move_info_follows, E_IPC_OP_MOVE_INFO_FOLLOWS_GET_REPLY, HDL);
  4794. #elif (TYPE == E_REMOTE_IN)
  4795. #endif
  4796. #undef HDL
  4797.  
  4798. /****************************************************************************/
  4799. #define HDL E_IPC_OP_MOVE_INFO_FOLLOWS_GET_REPLY
  4800. #if (TYPE == E_REMOTE_OPTIONS)
  4801. #elif (TYPE == E_REMOTE_OUT)
  4802. #elif (TYPE == E_WM_IN)
  4803. #elif (TYPE == E_REMOTE_IN)
  4804.    START_INT(val, HDL);
  4805.    printf("REPLY: %d\n", val);
  4806.    END_INT;
  4807. #endif
  4808. #undef HDL
  4809.  
  4810. /****************************************************************************/
  4811.  
  4812. #define HDL E_IPC_OP_RESIZE_INFO_FOLLOWS_SET
  4813. #if (TYPE == E_REMOTE_OPTIONS)
  4814.    OP("-resize-info-follows-set", 1, "Set whether the resize dialog should follow the client window", 0, HDL)
  4815. #elif (TYPE == E_REMOTE_OUT)
  4816.    REQ_INT(atoi(params[0]), HDL);
  4817. #elif (TYPE == E_WM_IN)
  4818.    START_INT(val, HDL);
  4819.    e_config->resize_info_follows = val;
  4820.    E_CONFIG_LIMIT(e_config->resize_info_follows, 0, 1);
  4821.    SAVE;
  4822.    END_INT;
  4823. #elif (TYPE == E_REMOTE_IN)
  4824. #endif
  4825. #undef HDL
  4826.  
  4827. /****************************************************************************/
  4828. #define HDL E_IPC_OP_RESIZE_INFO_FOLLOWS_GET
  4829. #if (TYPE == E_REMOTE_OPTIONS)
  4830.    OP("-resize-info-follows-get", 0, "Set whether the resize dialog should follow the client window", 1, HDL)
  4831. #elif (TYPE == E_REMOTE_OUT)
  4832.    REQ_NULL(HDL);
  4833. #elif (TYPE == E_WM_IN)
  4834.    SEND_INT(e_config->resize_info_follows, E_IPC_OP_RESIZE_INFO_FOLLOWS_GET_REPLY, HDL);
  4835. #elif (TYPE == E_REMOTE_IN)
  4836. #endif
  4837. #undef HDL
  4838.  
  4839. /****************************************************************************/
  4840. #define HDL E_IPC_OP_RESIZE_INFO_FOLLOWS_GET_REPLY
  4841. #if (TYPE == E_REMOTE_OPTIONS)
  4842. #elif (TYPE == E_REMOTE_OUT)
  4843. #elif (TYPE == E_WM_IN)
  4844. #elif (TYPE == E_REMOTE_IN)
  4845.    START_INT(val, HDL);
  4846.    printf("REPLY: %d\n", val);
  4847.    END_INT;
  4848. #endif
  4849. #undef HDL
  4850.  
  4851. /****************************************************************************/
  4852.  
  4853. #define HDL E_IPC_OP_MOVE_INFO_VISIBLE_SET
  4854. #if (TYPE == E_REMOTE_OPTIONS)
  4855.    OP("-move-info-visible-set", 1, "Set whether the move dialog should be visible", 0, HDL)
  4856. #elif (TYPE == E_REMOTE_OUT)
  4857.    REQ_INT(atoi(params[0]), HDL);
  4858. #elif (TYPE == E_WM_IN)
  4859.    START_INT(val, HDL);
  4860.    e_config->move_info_visible = val;
  4861.    E_CONFIG_LIMIT(e_config->move_info_visible, 0, 1);
  4862.    SAVE;
  4863.    END_INT;
  4864. #elif (TYPE == E_REMOTE_IN)
  4865. #endif
  4866. #undef HDL
  4867.  
  4868. /****************************************************************************/
  4869. #define HDL E_IPC_OP_MOVE_INFO_VISIBLE_GET
  4870. #if (TYPE == E_REMOTE_OPTIONS)
  4871.    OP("-move-info-visible-get", 0, "Get whether the move dialog should be visible", 1, HDL)
  4872. #elif (TYPE == E_REMOTE_OUT)
  4873.    REQ_NULL(HDL);
  4874. #elif (TYPE == E_WM_IN)
  4875.    SEND_INT(e_config->move_info_visible, E_IPC_OP_MOVE_INFO_VISIBLE_GET_REPLY, HDL);
  4876. #elif (TYPE == E_REMOTE_IN)
  4877. #endif
  4878. #undef HDL
  4879.  
  4880. /****************************************************************************/
  4881. #define HDL E_IPC_OP_MOVE_INFO_VISIBLE_GET_REPLY
  4882. #if (TYPE == E_REMOTE_OPTIONS)
  4883. #elif (TYPE == E_REMOTE_OUT)
  4884. #elif (TYPE == E_WM_IN)
  4885. #elif (TYPE == E_REMOTE_IN)
  4886.    START_INT(val, HDL);
  4887.    printf("REPLY: %d\n", val);
  4888.    END_INT;
  4889. #endif
  4890. #undef HDL
  4891.  
  4892. /****************************************************************************/
  4893.  
  4894. #define HDL E_IPC_OP_RESIZE_INFO_VISIBLE_SET
  4895. #if (TYPE == E_REMOTE_OPTIONS)
  4896.    OP("-resize-info-visible-set", 1, "Set whether the resize dialog should be visible", 0, HDL)
  4897. #elif (TYPE == E_REMOTE_OUT)
  4898.    REQ_INT(atoi(params[0]), HDL);
  4899. #elif (TYPE == E_WM_IN)
  4900.    START_INT(val, HDL);
  4901.    e_config->resize_info_visible = val;
  4902.    E_CONFIG_LIMIT(e_config->resize_info_visible, 0, 1);
  4903.    SAVE;
  4904.    END_INT;
  4905. #elif (TYPE == E_REMOTE_IN)
  4906. #endif
  4907. #undef HDL
  4908.  
  4909. /****************************************************************************/
  4910. #define HDL E_IPC_OP_RESIZE_INFO_VISIBLE_GET
  4911. #if (TYPE == E_REMOTE_OPTIONS)
  4912.    OP("-resize-info-visible-get", 0, "Set whether the resize dialog should be visible", 1, HDL)
  4913. #elif (TYPE == E_REMOTE_OUT)
  4914.    REQ_NULL(HDL);
  4915. #elif (TYPE == E_WM_IN)
  4916.    SEND_INT(e_config->resize_info_visible, E_IPC_OP_RESIZE_INFO_VISIBLE_GET_REPLY, HDL);
  4917. #elif (TYPE == E_REMOTE_IN)
  4918. #endif
  4919. #undef HDL
  4920.  
  4921. /****************************************************************************/
  4922. #define HDL E_IPC_OP_RESIZE_INFO_VISIBLE_GET_REPLY
  4923. #if (TYPE == E_REMOTE_OPTIONS)
  4924. #elif (TYPE == E_REMOTE_OUT)
  4925. #elif (TYPE == E_WM_IN)
  4926. #elif (TYPE == E_REMOTE_IN)
  4927.    START_INT(val, HDL);
  4928.    printf("REPLY: %d\n", val);
  4929.    END_INT;
  4930. #endif
  4931. #undef HDL
  4932.  
  4933. /****************************************************************************/
  4934.    
  4935. #define HDL E_IPC_OP_FOCUS_LAST_FOCUSED_PER_DESKTOP_SET
  4936. #if (TYPE == E_REMOTE_OPTIONS)
  4937.    OP("-focus-last-focused-per-desktop-set", 1, "Set whether E should remember focused windows when switching desks", 0, HDL)
  4938. #elif (TYPE == E_REMOTE_OUT)
  4939.    REQ_INT(atoi(params[0]), HDL);
  4940. #elif (TYPE == E_WM_IN)
  4941.    START_INT(val, HDL);
  4942.    e_config->focus_last_focused_per_desktop = val;
  4943.    E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1);
  4944.    SAVE;
  4945.    END_INT;
  4946. #elif (TYPE == E_REMOTE_IN)
  4947. #endif
  4948. #undef HDL
  4949.  
  4950. /****************************************************************************/
  4951. #define HDL E_IPC_OP_FOCUS_LAST_FOCUSED_PER_DESKTOP_GET
  4952. #if (TYPE == E_REMOTE_OPTIONS)
  4953.    OP("-focus-last-focused-per-desktop-get", 0, "Get whether E should remember focused windows when switching desks", 1, HDL)
  4954. #elif (TYPE == E_REMOTE_OUT)
  4955.    REQ_NULL(HDL);
  4956. #elif (TYPE == E_WM_IN)
  4957.    SEND_INT(e_config->focus_last_focused_per_desktop, E_IPC_OP_FOCUS_LAST_FOCUSED_PER_DESKTOP_GET_REPLY, HDL);
  4958. #elif (TYPE == E_REMOTE_IN)
  4959. #endif
  4960. #undef HDL
  4961.  
  4962. /****************************************************************************/
  4963. #define HDL E_IPC_OP_FOCUS_LAST_FOCUSED_PER_DESKTOP_GET_REPLY
  4964. #if (TYPE == E_REMOTE_OPTIONS)
  4965. #elif (TYPE == E_REMOTE_OUT)
  4966. #elif (TYPE == E_WM_IN)
  4967. #elif (TYPE == E_REMOTE_IN)
  4968.    START_INT(val, HDL);
  4969.    printf("REPLY: %d\n", val);
  4970.    END_INT;
  4971. #endif
  4972. #undef HDL
  4973.  
  4974. /****************************************************************************/
  4975.  
  4976. #define HDL E_IPC_OP_FOCUS_REVERT_ON_HIDE_OR_CLOSE_SET
  4977. #if (TYPE == E_REMOTE_OPTIONS)
  4978.    OP("-focus-revert-on-hide-or-close-set", 1, "Set whether E will focus the last focused window when you hide or close a focused window", 0, HDL)
  4979. #elif (TYPE == E_REMOTE_OUT)
  4980.    REQ_INT(atoi(params[0]), HDL);
  4981. #elif (TYPE == E_WM_IN)
  4982.    START_INT(val, HDL);
  4983.    e_config->focus_revert_on_hide_or_close = val;
  4984.    E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1);
  4985.    SAVE;
  4986.    END_INT;
  4987. #elif (TYPE == E_REMOTE_IN)
  4988. #endif
  4989. #undef HDL
  4990.  
  4991. /****************************************************************************/
  4992. #define HDL E_IPC_OP_FOCUS_REVERT_ON_HIDE_OR_CLOSE_GET
  4993. #if (TYPE == E_REMOTE_OPTIONS)
  4994.    OP("-focus-revert-on-hide-or-close-get", 0, "Get whether E will focus the last focused window when you hide or close a focused window", 1, HDL)
  4995. #elif (TYPE == E_REMOTE_OUT)
  4996.    REQ_NULL(HDL);
  4997. #elif (TYPE == E_WM_IN)
  4998.    SEND_INT(e_config->focus_revert_on_hide_or_close, E_IPC_OP_FOCUS_REVERT_ON_HIDE_OR_CLOSE_GET_REPLY, HDL);
  4999. #elif (TYPE == E_REMOTE_IN)
  5000. #endif
  5001. #undef HDL
  5002.  
  5003. /****************************************************************************/
  5004. #define HDL E_IPC_OP_FOCUS_REVERT_ON_HIDE_OR_CLOSE_GET_REPLY
  5005. #if (TYPE == E_REMOTE_OPTIONS)
  5006. #elif (TYPE == E_REMOTE_OUT)
  5007. #elif (TYPE == E_WM_IN)
  5008. #elif (TYPE == E_REMOTE_IN)
  5009.    START_INT(val, HDL);
  5010.    printf("REPLY: %d\n", val);
  5011.    END_INT;
  5012. #endif
  5013. #undef HDL
  5014.  
  5015. /****************************************************************************/
  5016. #define HDL E_IPC_OP_PROFILE_SET
  5017. #if (TYPE == E_REMOTE_OPTIONS)
  5018.    OP("-default-profile-set", 1, "Set the default configuration profile to OPT1", 0, HDL)
  5019. #elif (TYPE == E_REMOTE_OUT)
  5020.    REQ_STRING(params[0], HDL);
  5021. #elif (TYPE == E_WM_IN)
  5022.    STRING(s, HDL);
  5023.    /* TODO: Check if profile exists (or create profile?) */
  5024.    e_config_save_flush();
  5025.    e_config_profile_set(s);
  5026.    e_config_profile_save();
  5027.    e_config_save_block_set(1);
  5028.    restart = 1;
  5029.    ecore_main_loop_quit();
  5030.    END_STRING(s);
  5031. #elif (TYPE == E_REMOTE_IN)
  5032. #endif
  5033. #undef HDL
  5034.  
  5035. /****************************************************************************/
  5036. #define HDL E_IPC_OP_PROFILE_GET
  5037. #if (TYPE == E_REMOTE_OPTIONS)
  5038.    OP("-default-profile-get", 0, "Get the default configuration profile", 1, HDL)
  5039. #elif (TYPE == E_REMOTE_OUT)
  5040.    REQ_NULL(HDL);
  5041. #elif (TYPE == E_WM_IN)
  5042.    SEND_STRING(e_config_profile_get(), E_IPC_OP_PROFILE_GET_REPLY, HDL);
  5043. #elif (TYPE == E_REMOTE_IN)
  5044. #endif
  5045. #undef HDL
  5046.      
  5047. /****************************************************************************/
  5048. #define HDL E_IPC_OP_PROFILE_GET_REPLY
  5049. #if (TYPE == E_REMOTE_OPTIONS)
  5050. #elif (TYPE == E_REMOTE_OUT)
  5051. #elif (TYPE == E_WM_IN)
  5052. #elif (TYPE == E_REMOTE_IN)
  5053.    STRING(s, HDL);
  5054.    printf("REPLY: \"%s\"\n", s);
  5055.    END_STRING(s);
  5056. #endif
  5057. #undef HDL
  5058.  
  5059. /****************************************************************************/
  5060. #define HDL E_IPC_OP_PROFILE_LIST
  5061. #if (TYPE == E_REMOTE_OPTIONS)
  5062.    OP("-profile-list", 0, "List all existing profiles", 1, HDL)
  5063. #elif (TYPE == E_REMOTE_OUT)
  5064.    REQ_NULL(HDL);
  5065. #elif (TYPE == E_WM_IN)
  5066.    GENERIC(HDL);
  5067.    LIST_DATA();
  5068.    Evas_List *profiles;
  5069.    profiles = e_config_profile_list();
  5070.    ENCODE(profiles, e_ipc_codec_str_list_enc);
  5071.    SEND_DATA(E_IPC_OP_PROFILE_LIST_REPLY);
  5072.    FREE_LIST(profiles);
  5073.    END_GENERIC();
  5074. #elif (TYPE == E_REMOTE_IN)
  5075. #endif
  5076. #undef HDL
  5077.  
  5078. /****************************************************************************/
  5079. #define HDL E_IPC_OP_PROFILE_LIST_REPLY
  5080. #if (TYPE == E_REMOTE_OPTIONS)
  5081. #elif (TYPE == E_REMOTE_OUT)
  5082. #elif (TYPE == E_WM_IN)
  5083. #elif (TYPE == E_REMOTE_IN)
  5084.    GENERIC(HDL);
  5085.    LIST();
  5086.    DECODE(e_ipc_codec_str_list_dec) {
  5087.       FOR(dat) {
  5088.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  5089.       }
  5090.       FREE_LIST(dat);
  5091.    }
  5092.    END_GENERIC();
  5093. #endif
  5094. #undef HDL
  5095.  
  5096. /****************************************************************************/
  5097. #define HDL E_IPC_OP_DESKTOP_NAME_ADD
  5098. #if (TYPE == E_REMOTE_OPTIONS)
  5099.    OP("-desktop-name-add", 5, "Add a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y. OPT5 = desktop name", 0, HDL)
  5100. #elif (TYPE == E_REMOTE_OUT)
  5101.    REQ_4INT_2STRING_START(HDL);
  5102.    REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), params[4], "", HDL);
  5103. #elif (TYPE == E_WM_IN)
  5104.    INT4_STRING2(v, HDL);
  5105.    e_desk_name_add(v->val1, v->val2, v->val3, v->val4, v->str1);
  5106.    e_desk_name_update();
  5107.    SAVE;
  5108.    END_INT4_STRING2(v);
  5109. #elif (TYPE == E_REMOTE_IN)
  5110. #endif
  5111. #undef HDL
  5112.  
  5113. /****************************************************************************/
  5114. #define HDL E_IPC_OP_DESKTOP_NAME_DEL
  5115. #if (TYPE == E_REMOTE_OPTIONS)
  5116.    OP("-desktop-name-del", 4, "Delete a desktop name definition. OPT1 = container no. OPT2 = zone no. OPT3 = desk_x. OPT4 = desk_y.", 0, HDL)
  5117. #elif (TYPE == E_REMOTE_OUT)
  5118.    REQ_4INT_2STRING_START(HDL);
  5119.    REQ_4INT_2STRING_END(atoi(params[0]), atoi(params[1]), atoi(params[2]), atoi(params[3]), "", "", HDL);
  5120. #elif (TYPE == E_WM_IN)
  5121.    INT4_STRING2(v, HDL);
  5122.    e_desk_name_del(v->val1, v->val2, v->val3, v->val4);
  5123.    e_desk_name_update();
  5124.    SAVE;
  5125.    END_INT4_STRING2(v);
  5126. #elif (TYPE == E_REMOTE_IN)
  5127. #endif
  5128. #undef HDL
  5129.  
  5130. /****************************************************************************/
  5131. #define HDL E_IPC_OP_DESKTOP_NAME_LIST
  5132. #if (TYPE == E_REMOTE_OPTIONS)
  5133.    OP("-desktop-name-list", 0, "List all current desktop name definitions", 1, HDL)
  5134. #elif (TYPE == E_REMOTE_OUT)
  5135.    REQ_NULL(HDL);
  5136. #elif (TYPE == E_WM_IN)
  5137.    SEND_INT4_STRING2_LIST(e_config->desktop_names, E_Config_Desktop_Name, cfname, v, HDL);
  5138.    v->val1 = cfname->container;
  5139.    v->val2 = cfname->zone;
  5140.    v->val3 = cfname->desk_x;
  5141.    v->val4 = cfname->desk_y;
  5142.    v->str1 = cfname->name;
  5143.    v->str2 = "";
  5144.    END_SEND_INT4_STRING2_LIST(v, E_IPC_OP_DESKTOP_NAME_LIST_REPLY);
  5145. #elif (TYPE == E_REMOTE_IN)
  5146. #endif
  5147. #undef HDL
  5148.  
  5149. /****************************************************************************/
  5150. #define HDL E_IPC_OP_DESKTOP_NAME_LIST_REPLY
  5151. #if (TYPE == E_REMOTE_OPTIONS)
  5152. #elif (TYPE == E_REMOTE_OUT)
  5153. #elif (TYPE == E_WM_IN)
  5154. #elif (TYPE == E_REMOTE_IN)
  5155.    INT4_STRING2_LIST(v, HDL);
  5156.    printf("REPLY: BG CONTAINER=%i ZONE=%i DESK_X=%i DESK_Y=%i NAME=\"%s\"\n",
  5157.       v->val1, v->val2, v->val3, v->val4, v->str1);
  5158.    END_INT4_STRING2_LIST(v);
  5159. #endif
  5160. #undef HDL
  5161.  
  5162. /****************************************************************************/
  5163.  
  5164. #define HDL E_IPC_OP_CURSOR_SIZE_SET
  5165. #if (TYPE == E_REMOTE_OPTIONS)
  5166.    OP("-cursor-size-set", 1, "Set the E cursor size", 0, HDL)
  5167. #elif (TYPE == E_REMOTE_OUT)
  5168.    REQ_INT(atoi(params[0]), HDL);
  5169. #elif (TYPE == E_WM_IN)
  5170.    START_INT(val, HDL);
  5171.    e_config->cursor_size = val;
  5172.    E_CONFIG_LIMIT(e_config->cursor_size, 0, 1024);
  5173.    e_pointers_size_set(e_config->cursor_size);
  5174.    SAVE;
  5175.    END_INT;
  5176. #elif (TYPE == E_REMOTE_IN)
  5177. #endif
  5178. #undef HDL
  5179.  
  5180. /****************************************************************************/
  5181. #define HDL E_IPC_OP_CURSOR_SIZE_GET
  5182. #if (TYPE == E_REMOTE_OPTIONS)
  5183.    OP("-cursor-size-get", 0, "Get the E cursor size", 1, HDL)
  5184. #elif (TYPE == E_REMOTE_OUT)
  5185.    REQ_NULL(HDL);
  5186. #elif (TYPE == E_WM_IN)
  5187.    SEND_INT(e_config->cursor_size, E_IPC_OP_CURSOR_SIZE_GET_REPLY, HDL);
  5188. #elif (TYPE == E_REMOTE_IN)
  5189. #endif
  5190. #undef HDL
  5191.  
  5192. /****************************************************************************/
  5193. #define HDL E_IPC_OP_CURSOR_SIZE_GET_REPLY
  5194. #if (TYPE == E_REMOTE_OPTIONS)
  5195. #elif (TYPE == E_REMOTE_OUT)
  5196. #elif (TYPE == E_WM_IN)
  5197. #elif (TYPE == E_REMOTE_IN)
  5198.    START_INT(val, HDL);
  5199.    printf("REPLY: %d\n", val);
  5200.    END_INT;
  5201. #endif
  5202. #undef HDL
  5203.  
  5204. /****************************************************************************/
  5205.  
  5206. #define HDL E_IPC_OP_USE_E_CURSOR_SET
  5207. #if (TYPE == E_REMOTE_OPTIONS)
  5208.    OP("-use-e-cursor-set", 1, "Set whether E's cursor should be used", 0, HDL)
  5209. #elif (TYPE == E_REMOTE_OUT)
  5210.    REQ_INT(atoi(params[0]), HDL);
  5211. #elif (TYPE == E_WM_IN)
  5212.    START_INT(val, HDL);
  5213.    Evas_List *ml;
  5214.    e_config->use_e_cursor = val;
  5215.    E_CONFIG_LIMIT(e_config->use_e_cursor, 0, 1);
  5216.    for (ml = e_manager_list(); ml; ml = ml->next)
  5217.      {
  5218.     E_Manager *man;
  5219.     man = ml->data;
  5220.     if (man->pointer) e_object_del(E_OBJECT(man->pointer));
  5221.     man->pointer = e_pointer_window_new(man->root);
  5222.      }
  5223.    SAVE;
  5224.    END_INT;
  5225. #elif (TYPE == E_REMOTE_IN)
  5226. #endif
  5227. #undef HDL
  5228.  
  5229. /****************************************************************************/
  5230. #define HDL E_IPC_OP_USE_E_CURSOR_GET
  5231. #if (TYPE == E_REMOTE_OPTIONS)
  5232.    OP("-use-e-cursor-get", 0, "Get whether E's cursor should be used", 1, HDL)
  5233. #elif (TYPE == E_REMOTE_OUT)
  5234.    REQ_NULL(HDL);
  5235. #elif (TYPE == E_WM_IN)
  5236.    SEND_INT(e_config->use_e_cursor, E_IPC_OP_CURSOR_SIZE_GET_REPLY, HDL);
  5237. #elif (TYPE == E_REMOTE_IN)
  5238. #endif
  5239. #undef HDL
  5240.  
  5241. /****************************************************************************/
  5242. #define HDL E_IPC_OP_USE_E_CURSOR_GET_REPLY
  5243. #if (TYPE == E_REMOTE_OPTIONS)
  5244. #elif (TYPE == E_REMOTE_OUT)
  5245. #elif (TYPE == E_WM_IN)
  5246. #elif (TYPE == E_REMOTE_IN)
  5247.    START_INT(val, HDL);
  5248.    printf("REPLY: %d\n", val);
  5249.    END_INT;
  5250. #endif
  5251. #undef HDL
  5252.  
  5253. /****************************************************************************/
  5254.  
  5255. #define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_SET
  5256. #if (TYPE == E_REMOTE_OPTIONS)
  5257.    OP("-menu-autoscroll-margin-set", 1, "Set the distance from the edge of the screen the menu will autoscroll to", 0, HDL)
  5258. #elif (TYPE == E_REMOTE_OUT)
  5259.    REQ_INT(atoi(params[0]), HDL);
  5260. #elif (TYPE == E_WM_IN)
  5261.    START_INT(value, HDL);
  5262.    e_config->menu_autoscroll_margin = value;
  5263.    E_CONFIG_LIMIT(e_config->menu_autoscroll_margin, 0, 50);
  5264.    SAVE;
  5265.    END_INT;
  5266. #elif (TYPE == E_REMOTE_IN)
  5267. #endif
  5268. #undef HDL
  5269.  
  5270. /****************************************************************************/
  5271. #define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET
  5272. #if (TYPE == E_REMOTE_OPTIONS)
  5273.    OP("-menu-autoscroll-margin-get", 0, "Get the distance from the edge of the screen the menu will autoscroll to", 1, HDL)
  5274. #elif (TYPE == E_REMOTE_OUT)
  5275.    REQ_NULL(HDL)
  5276. #elif (TYPE == E_WM_IN)
  5277.    SEND_INT(e_config->menu_autoscroll_margin, E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY, HDL);
  5278. #elif (TYPE == E_REMOTE_IN)
  5279. #endif
  5280. #undef HDL
  5281.  
  5282. /****************************************************************************/
  5283. #define HDL E_IPC_OP_MENU_AUTOSCROLL_MARGIN_GET_REPLY
  5284. #if (TYPE == E_REMOTE_OPTIONS)
  5285. #elif (TYPE == E_REMOTE_OUT)
  5286. #elif (TYPE == E_WM_IN)
  5287. #elif (TYPE == E_REMOTE_IN)
  5288.    START_INT(val, HDL)
  5289.          printf("REPLY: %i\n", val);
  5290.          END_INT;
  5291. #endif
  5292. #undef HDL
  5293.  
  5294. /****************************************************************************/
  5295. #define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_SET
  5296. #if (TYPE == E_REMOTE_OPTIONS)
  5297.    OP("-menu-autoscroll-cursor-margin-set", 1, "Set the distance from the edge of the screen the cursor needs to be to start menu autoscrolling", 0, HDL)
  5298. #elif (TYPE == E_REMOTE_OUT)
  5299.    REQ_INT(atoi(params[0]), HDL);
  5300. #elif (TYPE == E_WM_IN)
  5301.    START_INT(value, HDL);
  5302.    e_config->menu_autoscroll_cursor_margin = value;
  5303.    E_CONFIG_LIMIT(e_config->menu_autoscroll_cursor_margin, 0, 50);
  5304.      //   e_zone_update_flip_all();
  5305.    SAVE;
  5306.    END_INT;
  5307. #elif (TYPE == E_REMOTE_IN)
  5308. #endif
  5309. #undef HDL
  5310.  
  5311. /****************************************************************************/
  5312. #define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET
  5313. #if (TYPE == E_REMOTE_OPTIONS)
  5314.    OP("-menu-autoscroll-cursor-margin-get", 0, "Get the distance from the edge of the screen the cursor needs to be to start menu autoscrolling", 1, HDL)
  5315. #elif (TYPE == E_REMOTE_OUT)
  5316.    REQ_NULL(HDL)
  5317. #elif (TYPE == E_WM_IN)
  5318.    SEND_INT(e_config->menu_autoscroll_cursor_margin, E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY, HDL);
  5319. #elif (TYPE == E_REMOTE_IN)
  5320. #endif
  5321. #undef HDL
  5322.  
  5323. /****************************************************************************/
  5324. #define HDL E_IPC_OP_MENU_AUTOSCROLL_CURSOR_MARGIN_GET_REPLY
  5325. #if (TYPE == E_REMOTE_OPTIONS)
  5326. #elif (TYPE == E_REMOTE_OUT)
  5327. #elif (TYPE == E_WM_IN)
  5328. #elif (TYPE == E_REMOTE_IN)
  5329.    START_INT(val, HDL)
  5330.          printf("REPLY: %i\n", val);
  5331.          END_INT;
  5332. #endif
  5333. #undef HDL
  5334.  
  5335. /****************************************************************************/
  5336. #define HDL E_IPC_OP_TRANSIENT_MOVE_SET
  5337. #if (TYPE == E_REMOTE_OPTIONS)
  5338.    OP("-transient-move-set", 1, "Set if transients should move with it's parent", 0, HDL)
  5339. #elif (TYPE == E_REMOTE_OUT)
  5340.    REQ_INT(atoi(params[0]), HDL);
  5341. #elif (TYPE == E_WM_IN)
  5342.    START_INT(val, HDL);
  5343.    e_config->transient.move = val;
  5344.    SAVE;
  5345.    END_INT;
  5346. #elif (TYPE == E_REMOTE_IN)
  5347. #endif
  5348. #undef HDL
  5349.  
  5350. /****************************************************************************/
  5351. #define HDL E_IPC_OP_TRANSIENT_MOVE_GET
  5352. #if (TYPE == E_REMOTE_OPTIONS)
  5353.    OP("-transient-move-get", 0, "Get if transients should move with it's parent", 1, HDL)
  5354. #elif (TYPE == E_REMOTE_OUT)
  5355.    REQ_NULL(HDL);
  5356. #elif (TYPE == E_WM_IN)
  5357.    SEND_INT(e_config->transient.move, E_IPC_OP_TRANSIENT_MOVE_GET_REPLY, HDL);
  5358. #elif (TYPE == E_REMOTE_IN)
  5359. #endif
  5360. #undef HDL
  5361.  
  5362. /****************************************************************************/
  5363. #define HDL E_IPC_OP_TRANSIENT_MOVE_GET_REPLY
  5364. #if (TYPE == E_REMOTE_OPTIONS)
  5365. #elif (TYPE == E_REMOTE_OUT)
  5366. #elif (TYPE == E_WM_IN)
  5367. #elif (TYPE == E_REMOTE_IN)
  5368.    START_INT(val, HDL);
  5369.    printf("REPLY: %d\n", val);
  5370.    END_INT;
  5371. #endif
  5372. #undef HDL
  5373.  
  5374. /****************************************************************************/
  5375. #define HDL E_IPC_OP_TRANSIENT_RESIZE_SET
  5376. #if (TYPE == E_REMOTE_OPTIONS)
  5377.    OP("-transient-resize-set", 1, "Set if transients should move when it's parent resizes", 0, HDL)
  5378. #elif (TYPE == E_REMOTE_OUT)
  5379.    REQ_INT(atoi(params[0]), HDL);
  5380. #elif (TYPE == E_WM_IN)
  5381.    START_INT(val, HDL);
  5382.    e_config->transient.resize = val;
  5383.    SAVE;
  5384.    END_INT;
  5385. #elif (TYPE == E_REMOTE_IN)
  5386. #endif
  5387. #undef HDL
  5388.  
  5389. /****************************************************************************/
  5390. #define HDL E_IPC_OP_TRANSIENT_RESIZE_GET
  5391. #if (TYPE == E_REMOTE_OPTIONS)
  5392.    OP("-transient-resize-get", 0, "Get if transients should move when it's parent resizes", 1, HDL)
  5393. #elif (TYPE == E_REMOTE_OUT)
  5394.    REQ_NULL(HDL);
  5395. #elif (TYPE == E_WM_IN)
  5396.    SEND_INT(e_config->transient.resize, E_IPC_OP_TRANSIENT_RESIZE_GET_REPLY, HDL);
  5397. #elif (TYPE == E_REMOTE_IN)
  5398. #endif
  5399. #undef HDL
  5400.  
  5401. /****************************************************************************/
  5402. #define HDL E_IPC_OP_TRANSIENT_RESIZE_GET_REPLY
  5403. #if (TYPE == E_REMOTE_OPTIONS)
  5404. #elif (TYPE == E_REMOTE_OUT)
  5405. #elif (TYPE == E_WM_IN)
  5406. #elif (TYPE == E_REMOTE_IN)
  5407.    START_INT(val, HDL);
  5408.    printf("REPLY: %d\n", val);
  5409.    END_INT;
  5410. #endif
  5411. #undef HDL
  5412.  
  5413. /****************************************************************************/
  5414. #define HDL E_IPC_OP_TRANSIENT_RAISE_SET
  5415. #if (TYPE == E_REMOTE_OPTIONS)
  5416.    OP("-transient-raise-set", 1, "Set if transients should raise with it's parent", 0, HDL)
  5417. #elif (TYPE == E_REMOTE_OUT)
  5418.    REQ_INT(atoi(params[0]), HDL);
  5419. #elif (TYPE == E_WM_IN)
  5420.    START_INT(val, HDL);
  5421.    e_config->transient.raise = val;
  5422.    SAVE;
  5423.    END_INT;
  5424. #elif (TYPE == E_REMOTE_IN)
  5425. #endif
  5426. #undef HDL
  5427.  
  5428. /****************************************************************************/
  5429. #define HDL E_IPC_OP_TRANSIENT_RAISE_GET
  5430. #if (TYPE == E_REMOTE_OPTIONS)
  5431.    OP("-transient-raise-get", 0, "Get if transients should raise with it's parent", 1, HDL)
  5432. #elif (TYPE == E_REMOTE_OUT)
  5433.    REQ_NULL(HDL);
  5434. #elif (TYPE == E_WM_IN)
  5435.    SEND_INT(e_config->transient.raise, E_IPC_OP_TRANSIENT_RAISE_GET_REPLY, HDL);
  5436. #elif (TYPE == E_REMOTE_IN)
  5437. #endif
  5438. #undef HDL
  5439.  
  5440. /****************************************************************************/
  5441. #define HDL E_IPC_OP_TRANSIENT_RAISE_GET_REPLY
  5442. #if (TYPE == E_REMOTE_OPTIONS)
  5443. #elif (TYPE == E_REMOTE_OUT)
  5444. #elif (TYPE == E_WM_IN)
  5445. #elif (TYPE == E_REMOTE_IN)
  5446.    START_INT(val, HDL);
  5447.    printf("REPLY: %d\n", val);
  5448.    END_INT;
  5449. #endif
  5450. #undef HDL
  5451.  
  5452. /****************************************************************************/
  5453. #define HDL E_IPC_OP_TRANSIENT_LOWER_SET
  5454. #if (TYPE == E_REMOTE_OPTIONS)
  5455.    OP("-transient-lower-set", 1, "Set if transients should lower with it's parent", 0, HDL)
  5456. #elif (TYPE == E_REMOTE_OUT)
  5457.    REQ_INT(atoi(params[0]), HDL);
  5458. #elif (TYPE == E_WM_IN)
  5459.    START_INT(val, HDL);
  5460.    e_config->transient.lower = val;
  5461.    SAVE;
  5462.    END_INT;
  5463. #elif (TYPE == E_REMOTE_IN)
  5464. #endif
  5465. #undef HDL
  5466.  
  5467. /****************************************************************************/
  5468. #define HDL E_IPC_OP_TRANSIENT_LOWER_GET
  5469. #if (TYPE == E_REMOTE_OPTIONS)
  5470.    OP("-transient-lower-get", 0, "Get if transients should lower with it's parent", 1, HDL)
  5471. #elif (TYPE == E_REMOTE_OUT)
  5472.    REQ_NULL(HDL);
  5473. #elif (TYPE == E_WM_IN)
  5474.    SEND_INT(e_config->transient.lower, E_IPC_OP_TRANSIENT_LOWER_GET_REPLY, HDL);
  5475. #elif (TYPE == E_REMOTE_IN)
  5476. #endif
  5477. #undef HDL
  5478.  
  5479. /****************************************************************************/
  5480. #define HDL E_IPC_OP_TRANSIENT_LOWER_GET_REPLY
  5481. #if (TYPE == E_REMOTE_OPTIONS)
  5482. #elif (TYPE == E_REMOTE_OUT)
  5483. #elif (TYPE == E_WM_IN)
  5484. #elif (TYPE == E_REMOTE_IN)
  5485.    START_INT(val, HDL);
  5486.    printf("REPLY: %d\n", val);
  5487.    END_INT;
  5488. #endif
  5489. #undef HDL
  5490.  
  5491. /****************************************************************************/
  5492. #define HDL E_IPC_OP_TRANSIENT_LAYER_SET
  5493. #if (TYPE == E_REMOTE_OPTIONS)
  5494.    OP("-transient-layer-set", 1, "Set if transients should change layer with it's parent", 0, HDL)
  5495. #elif (TYPE == E_REMOTE_OUT)
  5496.    REQ_INT(atoi(params[0]), HDL);
  5497. #elif (TYPE == E_WM_IN)
  5498.    START_INT(val, HDL);
  5499.    e_config->transient.layer = val;
  5500.    SAVE;
  5501.    END_INT;
  5502. #elif (TYPE == E_REMOTE_IN)
  5503. #endif
  5504. #undef HDL
  5505.  
  5506. /****************************************************************************/
  5507. #define HDL E_IPC_OP_TRANSIENT_LAYER_GET
  5508. #if (TYPE == E_REMOTE_OPTIONS)
  5509.    OP("-transient-layer-get", 0, "Get if transients should change layer with it's parent", 1, HDL)
  5510. #elif (TYPE == E_REMOTE_OUT)
  5511.    REQ_NULL(HDL);
  5512. #elif (TYPE == E_WM_IN)
  5513.    SEND_INT(e_config->transient.layer, E_IPC_OP_TRANSIENT_LAYER_GET_REPLY, HDL);
  5514. #elif (TYPE == E_REMOTE_IN)
  5515. #endif
  5516. #undef HDL
  5517.  
  5518. /****************************************************************************/
  5519. #define HDL E_IPC_OP_TRANSIENT_LAYER_GET_REPLY
  5520. #if (TYPE == E_REMOTE_OPTIONS)
  5521. #elif (TYPE == E_REMOTE_OUT)
  5522. #elif (TYPE == E_WM_IN)
  5523. #elif (TYPE == E_REMOTE_IN)
  5524.    START_INT(val, HDL);
  5525.    printf("REPLY: %d\n", val);
  5526.    END_INT;
  5527. #endif
  5528. #undef HDL
  5529.  
  5530. /****************************************************************************/
  5531. #define HDL E_IPC_OP_TRANSIENT_DESKTOP_SET
  5532. #if (TYPE == E_REMOTE_OPTIONS)
  5533.    OP("-transient-desktop-set", 1, "Set if transients should change desktop with it's parent", 0, HDL)
  5534. #elif (TYPE == E_REMOTE_OUT)
  5535.    REQ_INT(atoi(params[0]), HDL);
  5536. #elif (TYPE == E_WM_IN)
  5537.    START_INT(val, HDL);
  5538.    e_config->transient.desktop = val;
  5539.    SAVE;
  5540.    END_INT;
  5541. #elif (TYPE == E_REMOTE_IN)
  5542. #endif
  5543. #undef HDL
  5544.  
  5545. /****************************************************************************/
  5546. #define HDL E_IPC_OP_TRANSIENT_DESKTOP_GET
  5547. #if (TYPE == E_REMOTE_OPTIONS)
  5548.    OP("-transient-desktop-get", 0, "Get if transients should change desktop with it's parent", 1, HDL)
  5549. #elif (TYPE == E_REMOTE_OUT)
  5550.    REQ_NULL(HDL);
  5551. #elif (TYPE == E_WM_IN)
  5552.    SEND_INT(e_config->transient.desktop, E_IPC_OP_TRANSIENT_DESKTOP_GET_REPLY, HDL);
  5553. #elif (TYPE == E_REMOTE_IN)
  5554. #endif
  5555. #undef HDL
  5556.  
  5557. /****************************************************************************/
  5558. #define HDL E_IPC_OP_TRANSIENT_DESKTOP_GET_REPLY
  5559. #if (TYPE == E_REMOTE_OPTIONS)
  5560. #elif (TYPE == E_REMOTE_OUT)
  5561. #elif (TYPE == E_WM_IN)
  5562. #elif (TYPE == E_REMOTE_IN)
  5563.    START_INT(val, HDL);
  5564.    printf("REPLY: %d\n", val);
  5565.    END_INT;
  5566. #endif
  5567. #undef HDL
  5568.  
  5569. /****************************************************************************/
  5570. #define HDL E_IPC_OP_TRANSIENT_ICONIFY_SET
  5571. #if (TYPE == E_REMOTE_OPTIONS)
  5572.    OP("-transient-iconify-set", 1, "Set if transients should iconify with it's parent", 0, HDL)
  5573. #elif (TYPE == E_REMOTE_OUT)
  5574.    REQ_INT(atoi(params[0]), HDL);
  5575. #elif (TYPE == E_WM_IN)
  5576.    START_INT(val, HDL);
  5577.    e_config->transient.iconify = val;
  5578.    SAVE;
  5579.    END_INT;
  5580. #elif (TYPE == E_REMOTE_IN)
  5581. #endif
  5582. #undef HDL
  5583.  
  5584. /****************************************************************************/
  5585. #define HDL E_IPC_OP_TRANSIENT_ICONIFY_GET
  5586. #if (TYPE == E_REMOTE_OPTIONS)
  5587.    OP("-transient-iconify-get", 0, "Get if transients should iconify with it's parent", 1, HDL)
  5588. #elif (TYPE == E_REMOTE_OUT)
  5589.    REQ_NULL(HDL);
  5590. #elif (TYPE == E_WM_IN)
  5591.    SEND_INT(e_config->transient.iconify, E_IPC_OP_TRANSIENT_ICONIFY_GET_REPLY, HDL);
  5592. #elif (TYPE == E_REMOTE_IN)
  5593. #endif
  5594. #undef HDL
  5595.  
  5596. /****************************************************************************/
  5597. #define HDL E_IPC_OP_TRANSIENT_ICONIFY_GET_REPLY
  5598. #if (TYPE == E_REMOTE_OPTIONS)
  5599. #elif (TYPE == E_REMOTE_OUT)
  5600. #elif (TYPE == E_WM_IN)
  5601. #elif (TYPE == E_REMOTE_IN)
  5602.    START_INT(val, HDL);
  5603.    printf("REPLY: %d\n", val);
  5604.    END_INT;
  5605. #endif
  5606. #undef HDL
  5607.  
  5608. /****************************************************************************/
  5609. #define HDL E_IPC_OP_MODAL_WINDOWS_SET
  5610. #if (TYPE == E_REMOTE_OPTIONS)
  5611.    OP("-modal-windows-set", 1, "Set if enlightenment should honour modal windows", 0, HDL)
  5612. #elif (TYPE == E_REMOTE_OUT)
  5613.    REQ_INT(atoi(params[0]), HDL);
  5614. #elif (TYPE == E_WM_IN)
  5615.    START_INT(val, HDL);
  5616.    e_config->modal_windows = val;
  5617.    SAVE;
  5618.    END_INT;
  5619. #elif (TYPE == E_REMOTE_IN)
  5620. #endif
  5621. #undef HDL
  5622.  
  5623. /****************************************************************************/
  5624. #define HDL E_IPC_OP_MODAL_WINDOWS_GET
  5625. #if (TYPE == E_REMOTE_OPTIONS)
  5626.    OP("-modal-windows-get", 0, "Get if enlightenment should honour modal windows", 1, HDL)
  5627. #elif (TYPE == E_REMOTE_OUT)
  5628.    REQ_NULL(HDL);
  5629. #elif (TYPE == E_WM_IN)
  5630.    SEND_INT(e_config->modal_windows, E_IPC_OP_MODAL_WINDOWS_GET_REPLY, HDL);
  5631. #elif (TYPE == E_REMOTE_IN)
  5632. #endif
  5633. #undef HDL
  5634.  
  5635. /****************************************************************************/
  5636. #define HDL E_IPC_OP_MODAL_WINDOWS_GET_REPLY
  5637. #if (TYPE == E_REMOTE_OPTIONS)
  5638. #elif (TYPE == E_REMOTE_OUT)
  5639. #elif (TYPE == E_WM_IN)
  5640. #elif (TYPE == E_REMOTE_IN)
  5641.    START_INT(val, HDL);
  5642.    printf("REPLY: %d\n", val);
  5643.    END_INT;
  5644. #endif
  5645. #undef HDL
  5646.    
  5647. /****************************************************************************/
  5648. #define HDL E_IPC_OP_IM_LIST
  5649. #if (TYPE == E_REMOTE_OPTIONS)
  5650.    OP("-input-method-list", 0, "List all available input methods", 1, HDL)
  5651. #elif (TYPE == E_REMOTE_OUT)
  5652.    REQ_NULL(HDL);
  5653. #elif (TYPE == E_WM_IN)
  5654.    GENERIC(HDL);
  5655.    LIST_DATA();
  5656.    Evas_List *iml;
  5657.    iml = e_intl_input_method_list();
  5658.    ENCODE(iml, e_ipc_codec_str_list_enc);
  5659.    SEND_DATA(E_IPC_OP_IM_LIST_REPLY);
  5660.    FREE_LIST(iml);
  5661.    END_GENERIC();
  5662. #elif (TYPE == E_REMOTE_IN)
  5663. #endif
  5664. #undef HDL
  5665.      
  5666. /****************************************************************************/
  5667. #define HDL E_IPC_OP_IM_LIST_REPLY
  5668. #if (TYPE == E_REMOTE_OPTIONS)
  5669. #elif (TYPE == E_REMOTE_OUT)
  5670. #elif (TYPE == E_WM_IN)
  5671. #elif (TYPE == E_REMOTE_IN)
  5672.    GENERIC(HDL);
  5673.    LIST();
  5674.    DECODE(e_ipc_codec_str_list_dec) {
  5675.       FOR(dat) {
  5676.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  5677.       }
  5678.       FREE_LIST(dat);
  5679.    }
  5680.    END_GENERIC();
  5681. #endif
  5682. #undef HDL
  5683.  
  5684. /****************************************************************************/
  5685. #define HDL E_IPC_OP_IM_SET
  5686. #if (TYPE == E_REMOTE_OPTIONS)
  5687.    OP("-input-method-set", 1, "Set the current input method to 'OPT1'", 0, HDL)
  5688. #elif (TYPE == E_REMOTE_OUT)
  5689.    REQ_STRING(params[0], HDL);
  5690. #elif (TYPE == E_WM_IN)
  5691.    STRING(s, HDL);
  5692.    if (e_config->input_method) evas_stringshare_del(e_config->input_method);
  5693.    e_config->input_method = NULL;
  5694.    if (s) e_config->input_method = evas_stringshare_add(s);
  5695.    if ((e_config->input_method) && (e_config->input_method[0] != 0))
  5696.      e_intl_input_method_set(e_config->input_method);
  5697.    else
  5698.      e_intl_input_method_set(NULL);
  5699.    SAVE;
  5700.    END_STRING(s);
  5701. #elif (TYPE == E_REMOTE_IN)
  5702. #endif
  5703. #undef HDL
  5704.      
  5705. /****************************************************************************/
  5706. #define HDL E_IPC_OP_IM_GET
  5707. #if (TYPE == E_REMOTE_OPTIONS)
  5708.    OP("-input-method-get", 0, "Get the current input method", 1, HDL)
  5709. #elif (TYPE == E_REMOTE_OUT)
  5710.    REQ_NULL(HDL);
  5711. #elif (TYPE == E_WM_IN)
  5712.    SEND_STRING(e_config->input_method, E_IPC_OP_IM_GET_REPLY, HDL);
  5713. #elif (TYPE == E_REMOTE_IN)
  5714. #endif
  5715. #undef HDL
  5716.      
  5717. /****************************************************************************/
  5718. #define HDL E_IPC_OP_IM_GET_REPLY
  5719. #if (TYPE == E_REMOTE_OPTIONS)
  5720. #elif (TYPE == E_REMOTE_OUT)
  5721. #elif (TYPE == E_WM_IN)
  5722. #elif (TYPE == E_REMOTE_IN)
  5723.    STRING(s, HDL);
  5724.    printf("REPLY: \"%s\"\n", s);
  5725.    END_STRING(s);
  5726. #endif
  5727. #undef HDL
  5728.  
  5729. /****************************************************************************/
  5730. #define HDL E_IPC_OP_WINDOW_PLACEMENT_POLICY_SET
  5731. #if (TYPE == E_REMOTE_OPTIONS)
  5732.    OP("-window-placement-policy-set", 1, "Set the window placement policy. OPT1 = SMART, CURSOR or MANUAL", 0, HDL)
  5733. #elif (TYPE == E_REMOTE_OUT)
  5734.    REQ_INT_START(HDL)
  5735.    int value = 0;
  5736.    if (!strcmp(params[0], "SMART")) value = E_WINDOW_PLACEMENT_SMART;
  5737.    else if (!strcmp(params[0], "CURSOR")) value = E_WINDOW_PLACEMENT_CURSOR;
  5738.    else if (!strcmp(params[0], "MANUAL")) value = E_WINDOW_PLACEMENT_MANUAL;
  5739.    else
  5740.      {
  5741.      printf("window placement policy must be SMART, CURSOR or MANUAL\n");
  5742.      exit(-1);
  5743.      }
  5744.    REQ_INT_END(value, HDL);
  5745. #elif (TYPE == E_WM_IN)
  5746.    START_INT(value, HDL);
  5747.    e_config->window_placement_policy = value;
  5748.    E_CONFIG_LIMIT(e_config->window_placement_policy, E_WINDOW_PLACEMENT_SMART, E_WINDOW_PLACEMENT_MANUAL);
  5749.    SAVE;
  5750.    END_INT
  5751. #elif (TYPE == E_REMOTE_IN)
  5752. #endif
  5753. #undef HDL
  5754.  
  5755. /****************************************************************************/
  5756. #define HDL E_IPC_OP_WINDOW_PLACEMENT_POLICY_GET
  5757. #if (TYPE == E_REMOTE_OPTIONS)
  5758.    OP("-window-placement-policy-get", 0, "Get window placement policy", 1, HDL)
  5759. #elif (TYPE == E_REMOTE_OUT)
  5760.    REQ_NULL(HDL);
  5761. #elif (TYPE == E_WM_IN)
  5762.    SEND_INT(e_config->window_placement_policy, E_IPC_OP_WINDOW_PLACEMENT_POLICY_GET_REPLY, HDL);
  5763. #elif (TYPE == E_REMOTE_IN)
  5764. #endif
  5765. #undef HDL
  5766.  
  5767. /****************************************************************************/
  5768. #define HDL E_IPC_OP_WINDOW_PLACEMENT_POLICY_GET_REPLY
  5769. #if (TYPE == E_REMOTE_OPTIONS)
  5770. #elif (TYPE == E_REMOTE_OUT)
  5771. #elif (TYPE == E_WM_IN)
  5772. #elif (TYPE == E_REMOTE_IN)
  5773.    START_INT(policy, HDL);
  5774.    if (policy == E_WINDOW_PLACEMENT_SMART)
  5775.      printf("REPLY: SMART\n");
  5776.    else if (policy == E_WINDOW_PLACEMENT_CURSOR)
  5777.      printf("REPLY: CURSOR\n");
  5778.    else if (policy == E_WINDOW_PLACEMENT_MANUAL)
  5779.      printf("REPLY: MANUAL\n");
  5780.    END_INT
  5781. #endif
  5782. #undef HDL
  5783.  
  5784. /****************************************************************************/
  5785. #define HDL E_IPC_OP_CONFIG_PANEL_SHOW
  5786. #if (TYPE == E_REMOTE_OPTIONS)
  5787.    OP("-config-panel-show", 0, "Show the configuration panel", 0, HDL)
  5788. #elif (TYPE == E_REMOTE_OUT)
  5789.    REQ_NULL(HDL)
  5790. #elif (TYPE == E_WM_IN)
  5791.    GENERIC(HDL);
  5792.    e_configure_show(e_container_current_get(e_manager_current_get()));
  5793.    END_GENERIC();
  5794. #elif (TYPE == E_REMOTE_IN)
  5795. #endif
  5796. #undef HDL
  5797.  
  5798. /****************************************************************************/
  5799.  
  5800. #define HDL E_IPC_OP_BINDING_SIGNAL_LIST 
  5801. #if (TYPE == E_REMOTE_OPTIONS)
  5802.    /* e_remote define command line args */
  5803.    OP("-binding-signal-list", 0, "List all signal bindings", 1, HDL)
  5804. #elif (TYPE == E_REMOTE_OUT)
  5805.    /* e_remote parse command line args encode and send request */
  5806.    REQ_NULL(HDL);
  5807. #elif (TYPE == E_WM_IN)
  5808.    /* e_ipc decode request and do action or send reply */
  5809.    SEND_INT3_STRING4_LIST(e_config->signal_bindings, E_Config_Binding_Signal, emb, v, HDL);
  5810.    v->val1 = emb->context;
  5811.    v->str1 = emb->signal;
  5812.    v->str2 = emb->source;
  5813.    v->val2 = emb->modifiers;
  5814.    v->val3 = emb->any_mod;
  5815.    v->str3 = emb->action;
  5816.    v->str4 = emb->params;
  5817.    END_SEND_INT3_STRING4_LIST(v, E_IPC_OP_BINDING_SIGNAL_LIST_REPLY);
  5818. #endif
  5819. #undef HDL
  5820.  
  5821. /****************************************************************************/
  5822.  
  5823. #define HDL E_IPC_OP_BINDING_SIGNAL_LIST_REPLY
  5824. #if (TYPE == E_REMOTE_OPTIONS)
  5825. #elif (TYPE == E_REMOTE_OUT)
  5826. #elif (TYPE == E_WM_IN)
  5827. #elif (TYPE == E_REMOTE_IN)
  5828.    /* e_remote decode the response from e_ipc and print it to the console */
  5829.    INT3_STRING4_LIST(v, HDL);
  5830.    {
  5831.       char *context;
  5832.       char modifier[256];
  5833.       char *s1, *s2, *s3, *s4;
  5834.       
  5835.       if (v->val1 == E_BINDING_CONTEXT_NONE) context = "NONE";
  5836.       else if (v->val1 == E_BINDING_CONTEXT_UNKNOWN) context = "UNKNOWN";
  5837.       else if (v->val1 == E_BINDING_CONTEXT_BORDER) context = "BORDER";
  5838.       else if (v->val1 == E_BINDING_CONTEXT_ZONE) context = "ZONE";
  5839.       else if (v->val1 == E_BINDING_CONTEXT_CONTAINER) context = "CONTAINER";
  5840.       else if (v->val1 == E_BINDING_CONTEXT_MANAGER) context = "MANAGER";
  5841.       else if (v->val1 == E_BINDING_CONTEXT_MENU) context = "MENU";
  5842.       else if (v->val1 == E_BINDING_CONTEXT_WINLIST) context = "WINLIST";
  5843.       else if (v->val1 == E_BINDING_CONTEXT_POPUP) context = "POPUP";
  5844.       else if (v->val1 == E_BINDING_CONTEXT_ANY) context = "ANY";
  5845.       else context = "";
  5846.  
  5847.       modifier[0] = 0;
  5848.       if (v->val2 & E_BINDING_MODIFIER_SHIFT)
  5849.       {
  5850.         if (modifier[0] != 0) strcat(modifier, "|");
  5851.         strcat(modifier, "SHIFT");
  5852.       }
  5853.       if (v->val2 & E_BINDING_MODIFIER_CTRL)
  5854.       {
  5855.         if (modifier[0] != 0) strcat(modifier, "|");
  5856.         strcat(modifier, "CTRL");
  5857.       }
  5858.       if (v->val2 & E_BINDING_MODIFIER_ALT)
  5859.       {
  5860.         if (modifier[0] != 0) strcat(modifier, "|");
  5861.         strcat(modifier, "ALT");
  5862.       }
  5863.       if (v->val2 & E_BINDING_MODIFIER_WIN)
  5864.       {
  5865.         if (modifier[0] != 0) strcat(modifier, "|");
  5866.         strcat(modifier, "WIN");
  5867.       }
  5868.       if (v->val2 == E_BINDING_MODIFIER_NONE)
  5869.          strcpy(modifier, "NONE");
  5870.  
  5871.       s1 = v->str1;
  5872.       s2 = v->str2;
  5873.       s3 = v->str3;
  5874.       s4 = v->str4;
  5875.       if (!s1) s1 = "";
  5876.       if (!s2) s2 = "";
  5877.       if (!s3) s3 = "";
  5878.       if (!s4) s4 = "";
  5879.       printf("REPLY: BINDING CONTEXT=%s SIGNAL=%s SOURCE=%s MODIFIERS=%s ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n",
  5880.         context,
  5881.         s1,
  5882.         s2,
  5883.         modifier,
  5884.                 v->val3,
  5885.                 s3,
  5886.                 s4
  5887.         );
  5888.    }
  5889.    END_INT3_STRING4_LIST(v);
  5890. #elif E_LIB_IN
  5891.    INT3_STRING4_LIST_START(v, HDL);
  5892.    {
  5893.       int count;
  5894.       RESPONSE(r, E_Response_Binding_Signal_List);
  5895.       count = evas_list_count(dat);
  5896.       r->bindings = malloc(sizeof(E_Response_Binding_Signal_Data *) * count);
  5897.       r->count = count;
  5898.  
  5899.       count = 0;
  5900.       INT3_STRING4_LIST_ITERATE(v);
  5901.       {
  5902.      E_Response_Binding_Signal_Data *d;
  5903.  
  5904.      d = malloc(sizeof(E_Response_Binding_Signal_Data));
  5905.      d->ctx = v->val1;
  5906.      d->signal = v->str1;
  5907.      d->source = v->str2;
  5908.      d->mod = v->val2;
  5909.      d->any_mod = v->val3;
  5910.      d->action = ((v->str3) ? evas_stringshare_add(v->str3) : NULL);
  5911.      d->params = ((v->str4) ? evas_stringshare_add(v->str4) : NULL);
  5912.  
  5913.      r->bindings[count] = d;
  5914.      count++;
  5915.       }
  5916.       END_INT3_STRING4_LIST_ITERATE(v);
  5917.       /* this will leak, need to free the event data */
  5918.       END_RESPONSE(r, E_RESPONSE_BINDING_SIGNAL_LIST);
  5919.    }
  5920.    END_INT3_STRING4_LIST_START();
  5921. #endif
  5922. #undef HDL
  5923.  
  5924. /****************************************************************************/
  5925.  
  5926. #define HDL E_IPC_OP_BINDING_SIGNAL_ADD
  5927. #if (TYPE == E_REMOTE_OPTIONS)
  5928.    /* e_remote define command line args */
  5929.    OP("-binding-signal-add", 7, "Add an existing signal binding. OPT1 = Context, OPT2 = signal, OPT3 = source, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters", 0, HDL)
  5930. #elif (TYPE == E_REMOTE_OUT)
  5931.    /* e_remote parse command line args encode and send request */
  5932.    REQ_3INT_4STRING_START(HDL);
  5933.    E_Config_Binding_Signal eb;
  5934.  
  5935.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  5936.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  5937.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  5938.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  5939.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  5940.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  5941.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  5942.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  5943.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  5944.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  5945.    else
  5946.      {
  5947.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  5948.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  5949.         exit(-1);
  5950.      }
  5951.    eb.signal = params[1];
  5952.    eb.source = params[2];
  5953.    /* M1[|M2...] */
  5954.      {
  5955.         char *p, *pp;
  5956.  
  5957.         eb.modifiers = 0;
  5958.         pp = params[3];
  5959.         for (;;)
  5960.           {
  5961.              p = strchr(pp, '|');
  5962.              if (p)
  5963.                {
  5964.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  5965.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  5966.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  5967.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  5968.                   else if (pp[0] != 0)
  5969.                     {
  5970.                        printf("OPT4 moidifier unknown. Must be or mask of:\n"
  5971.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  5972.                        exit(-1);
  5973.                     }
  5974.                   pp = p + 1;
  5975.                }
  5976.              else
  5977.                {
  5978.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  5979.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  5980.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  5981.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  5982.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  5983.                   else if (pp[0] != 0)
  5984.                     {
  5985.                        printf("OPT4 moidifier unknown. Must be or mask of:\n"
  5986.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  5987.                        exit(-1);
  5988.                     }
  5989.                   break;
  5990.                }
  5991.           }
  5992.      }
  5993.    eb.any_mod = atoi(params[4]);
  5994.    eb.action = params[5];
  5995.    eb.params = params[6];
  5996.    REQ_3INT_4STRING_END(eb.context, eb.modifiers, eb.any_mod, eb.signal, eb.source, eb.action, eb.params, HDL);
  5997. #elif (TYPE == E_WM_IN)
  5998.    /* e_ipc decode request and do action */
  5999.    INT3_STRING4(v, HDL)
  6000.    E_Config_Binding_Signal bind, *eb;
  6001.  
  6002.    bind.context = v->val1; 
  6003.    bind.signal = v->str1; 
  6004.    bind.source = v->str2; 
  6005.    bind.modifiers = v->val2;
  6006.    bind.any_mod = v->val3;
  6007.    bind.action = v->str3; 
  6008.    bind.params = v->str4;
  6009.  
  6010.    eb = e_config_binding_signal_match(&bind);
  6011.    if (!eb)
  6012.      {
  6013.         eb = E_NEW(E_Config_Binding_Signal, 1);
  6014.         e_config->signal_bindings = evas_list_append(e_config->signal_bindings, eb);
  6015.         eb->context = bind.context;
  6016.         if (bind.signal) eb->signal = evas_stringshare_add(bind.signal);
  6017.         if (bind.source) eb->source = evas_stringshare_add(bind.source);
  6018.         eb->modifiers = bind.modifiers;
  6019.         eb->any_mod = bind.any_mod;
  6020.         if (bind.action) eb->action = evas_stringshare_add(bind.action);
  6021.         if (bind.params) eb->params = evas_stringshare_add(bind.params);
  6022.         e_bindings_signal_add(bind.context, bind.signal, bind.source, bind.modifiers,
  6023.                   bind.any_mod, bind.action, bind.params);
  6024.         e_config_save_queue();  
  6025.      }
  6026.    END_INT3_STRING4(v);
  6027. #elif (TYPE == E_REMOTE_IN)
  6028. #endif
  6029. #undef HDL
  6030.  
  6031. /****************************************************************************/
  6032.  
  6033. #define HDL E_IPC_OP_BINDING_SIGNAL_DEL
  6034. #if (TYPE == E_REMOTE_OPTIONS)
  6035.    /* e_remote define command line args */
  6036.    OP("-binding-signal-del", 7, "Delete an existing signal binding. OPT1 = Context, OPT2 = signal, OPT3 = source, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters", 0, HDL)
  6037. #elif (TYPE == E_REMOTE_OUT)
  6038.    /* e_remote parse command line args encode and send request */
  6039.    REQ_3INT_4STRING_START(HDL);
  6040.    E_Config_Binding_Signal eb;
  6041.  
  6042.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  6043.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  6044.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  6045.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  6046.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  6047.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  6048.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  6049.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  6050.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  6051.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  6052.    else
  6053.      {
  6054.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  6055.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  6056.         exit(-1);
  6057.      }
  6058.    eb.signal = params[1];
  6059.    eb.source = params[2];
  6060.    /* M1[|M2...] */
  6061.      {
  6062.         char *p, *pp;
  6063.  
  6064.         eb.modifiers = 0;
  6065.         pp = params[3];
  6066.         for (;;)
  6067.           {
  6068.              p = strchr(pp, '|');
  6069.              if (p)
  6070.                {
  6071.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6072.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6073.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6074.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6075.                   else if (pp[0] != 0)
  6076.                     {
  6077.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  6078.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6079.                        exit(-1);
  6080.                     }
  6081.                   pp = p + 1;
  6082.                }
  6083.              else
  6084.                {
  6085.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6086.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6087.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6088.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6089.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  6090.                   else if (pp[0] != 0)
  6091.                     {
  6092.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  6093.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6094.                        exit(-1);
  6095.                     }
  6096.                   break;
  6097.                }
  6098.           }
  6099.      }
  6100.    eb.any_mod = atoi(params[4]);
  6101.    eb.action = params[5];
  6102.    eb.params = params[6];
  6103.  
  6104.    REQ_3INT_4STRING_END(eb.context, eb.modifiers, eb.any_mod, eb.signal, eb.source, eb.action, eb.params, HDL);
  6105. #elif (TYPE == E_WM_IN)
  6106.    /* e_ipc decode request and do action */
  6107.    INT3_STRING4(v, HDL)
  6108.    E_Config_Binding_Signal bind, *eb;
  6109.  
  6110.    bind.context = v->val1;
  6111.    bind.signal = v->str1;
  6112.    bind.source = v->str2;
  6113.    bind.modifiers = v->val2;
  6114.    bind.any_mod = v->val3;
  6115.    bind.action = v->str3;
  6116.    bind.params = v->str4;
  6117.    
  6118.    eb = e_config_binding_signal_match(&bind);
  6119.    if (eb)
  6120.      {
  6121.     e_config->signal_bindings = evas_list_remove(e_config->signal_bindings, eb);
  6122.         if (eb->signal) evas_stringshare_del(eb->signal);
  6123.         if (eb->source) evas_stringshare_del(eb->source);
  6124.         if (eb->action) evas_stringshare_del(eb->action);
  6125.         if (eb->params) evas_stringshare_del(eb->params);
  6126.         E_FREE(eb);
  6127.         e_bindings_signal_del(bind.context, bind.signal, bind.source, bind.modifiers,
  6128.                   bind.any_mod, bind.action, bind.params);
  6129.         e_config_save_queue();
  6130.      }
  6131.    END_INT3_STRING4(v);
  6132. #elif (TYPE == E_REMOTE_IN)
  6133. #endif
  6134. #undef HDL
  6135.  
  6136. /****************************************************************************/
  6137.  
  6138. #define HDL E_IPC_OP_BINDING_WHEEL_LIST 
  6139. #if (TYPE == E_REMOTE_OPTIONS)
  6140.    /* e_remote define command line args */
  6141.    OP("-binding-wheel-list", 0, "List all wheel bindings", 1, HDL)
  6142. #elif (TYPE == E_REMOTE_OUT)
  6143.    /* e_remote parse command line args encode and send request */
  6144.    REQ_NULL(HDL);
  6145. #elif (TYPE == E_WM_IN)
  6146.    /* e_ipc decode request and do action or send reply */
  6147.    SEND_INT5_STRING2_LIST(e_config->wheel_bindings, E_Config_Binding_Wheel, emb, v, HDL);
  6148.    v->val1 = emb->context;
  6149.    v->val2 = emb->direction;
  6150.    v->val3 = emb->z;
  6151.    v->val4 = emb->modifiers;
  6152.    v->val5 = emb->any_mod;
  6153.    v->str1 = emb->action;
  6154.    v->str2 = emb->params;
  6155.    END_SEND_INT5_STRING2_LIST(v, E_IPC_OP_BINDING_WHEEL_LIST_REPLY);
  6156. #endif
  6157. #undef HDL
  6158.  
  6159. /****************************************************************************/
  6160.  
  6161. #define HDL E_IPC_OP_BINDING_WHEEL_LIST_REPLY
  6162. #if (TYPE == E_REMOTE_OPTIONS)
  6163. #elif (TYPE == E_REMOTE_OUT)
  6164. #elif (TYPE == E_WM_IN)
  6165. #elif (TYPE == E_REMOTE_IN)
  6166.    /* e_remote decode the response from e_ipc and print it to the console */
  6167.    INT5_STRING2_LIST(v, HDL);
  6168.    {
  6169.       char *context;
  6170.       char modifier[256];
  6171.       char *s1, *s2;
  6172.       
  6173.       if (v->val1 == E_BINDING_CONTEXT_NONE) context = "NONE";
  6174.       else if (v->val1 == E_BINDING_CONTEXT_UNKNOWN) context = "UNKNOWN";
  6175.       else if (v->val1 == E_BINDING_CONTEXT_BORDER) context = "BORDER";
  6176.       else if (v->val1 == E_BINDING_CONTEXT_ZONE) context = "ZONE";
  6177.       else if (v->val1 == E_BINDING_CONTEXT_CONTAINER) context = "CONTAINER";
  6178.       else if (v->val1 == E_BINDING_CONTEXT_MANAGER) context = "MANAGER";
  6179.       else if (v->val1 == E_BINDING_CONTEXT_MENU) context = "MENU";
  6180.       else if (v->val1 == E_BINDING_CONTEXT_WINLIST) context = "WINLIST";
  6181.       else if (v->val1 == E_BINDING_CONTEXT_POPUP) context = "POPUP";
  6182.       else if (v->val1 == E_BINDING_CONTEXT_ANY) context = "ANY";
  6183.       else context = "";
  6184.  
  6185.       modifier[0] = 0;
  6186.       if (v->val4 & E_BINDING_MODIFIER_SHIFT)
  6187.       {
  6188.         if (modifier[0] != 0) strcat(modifier, "|");
  6189.         strcat(modifier, "SHIFT");
  6190.       }
  6191.       if (v->val4 & E_BINDING_MODIFIER_CTRL)
  6192.       {
  6193.         if (modifier[0] != 0) strcat(modifier, "|");
  6194.         strcat(modifier, "CTRL");
  6195.       }
  6196.       if (v->val4 & E_BINDING_MODIFIER_ALT)
  6197.       {
  6198.         if (modifier[0] != 0) strcat(modifier, "|");
  6199.         strcat(modifier, "ALT");
  6200.       }
  6201.       if (v->val4 & E_BINDING_MODIFIER_WIN)
  6202.       {
  6203.         if (modifier[0] != 0) strcat(modifier, "|");
  6204.         strcat(modifier, "WIN");
  6205.       }
  6206.       if (v->val4 == E_BINDING_MODIFIER_NONE)
  6207.          strcpy(modifier, "NONE");
  6208.  
  6209.       s1 = v->str1;
  6210.       s2 = v->str2;
  6211.       if (!s1) s1 = "";
  6212.       if (!s2) s2 = "";
  6213.       printf("REPLY: BINDING CONTEXT=%s DIRECTION=%i Z=%i MODIFIERS=%s ANY_MOD=%i ACTION=\"%s\" PARAMS=\"%s\"\n",
  6214.         context,
  6215.                 v->val2,
  6216.                 v->val3,
  6217.         modifier,
  6218.                 v->val5,
  6219.                 s1,
  6220.                 s2
  6221.         );
  6222.    }
  6223.    END_INT5_STRING2_LIST(v);
  6224. #elif E_LIB_IN
  6225.    INT5_STRING2_LIST_START(v, HDL);
  6226.    {
  6227.       int count;
  6228.       RESPONSE(r, E_Response_Binding_Wheel_List);
  6229.       count = evas_list_count(dat);
  6230.       r->bindings = malloc(sizeof(E_Response_Binding_Wheel_Data *) * count);
  6231.       r->count = count;
  6232.  
  6233.       count = 0;
  6234.       INT5_STRING2_LIST_ITERATE(v);
  6235.       {
  6236.      E_Response_Binding_Wheel_Data *d;
  6237.  
  6238.      d = malloc(sizeof(E_Response_Binding_Wheel_Data));
  6239.      d->ctx = v->val1;
  6240.      d->direction = v->val2;
  6241.      d->z = v->val3;
  6242.      d->mod = v->val4;
  6243.      d->any_mod = v->val5;
  6244.      d->action = ((v->str1) ? evas_stringshare_add(v->str1) : NULL);
  6245.      d->params = ((v->str2) ? evas_stringshare_add(v->str2) : NULL);
  6246.  
  6247.      r->bindings[count] = d;
  6248.      count++;
  6249.       }
  6250.       END_INT5_STRING2_LIST_ITERATE(v);
  6251.       /* this will leak, need to free the event data */
  6252.       END_RESPONSE(r, E_RESPONSE_BINDING_WHEEL_LIST);
  6253.    }
  6254.    END_INT5_STRING2_LIST_START();
  6255. #endif
  6256. #undef HDL
  6257.  
  6258. /****************************************************************************/
  6259.  
  6260. #define HDL E_IPC_OP_BINDING_WHEEL_ADD
  6261. #if (TYPE == E_REMOTE_OPTIONS)
  6262.    /* e_remote define command line args */
  6263.    OP("-binding-wheel-add", 7, "Add an existing wheel binding. OPT1 = Context, OPT2 = direction, OPT3 = z, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters", 0, HDL)
  6264. #elif (TYPE == E_REMOTE_OUT)
  6265.    /* e_remote parse command line args encode and send request */
  6266.    REQ_5INT_2STRING_START(HDL);
  6267.    E_Config_Binding_Wheel eb;
  6268.  
  6269.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  6270.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  6271.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  6272.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  6273.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  6274.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  6275.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  6276.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  6277.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  6278.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  6279.    else
  6280.      {
  6281.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  6282.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  6283.         exit(-1);
  6284.      }
  6285.    eb.direction = atoi(params[1]);
  6286.    eb.z = atoi(params[2]);
  6287.    /* M1[|M2...] */
  6288.      {
  6289.         char *p, *pp;
  6290.  
  6291.         eb.modifiers = 0;
  6292.         pp = params[3];
  6293.         for (;;)
  6294.           {
  6295.              p = strchr(pp, '|');
  6296.              if (p)
  6297.                {
  6298.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6299.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6300.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6301.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6302.                   else if (pp[0] != 0)
  6303.                     {
  6304.                        printf("OPT4 moidifier unknown. Must be or mask of:\n"
  6305.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6306.                        exit(-1);
  6307.                     }
  6308.                   pp = p + 1;
  6309.                }
  6310.              else
  6311.                {
  6312.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6313.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6314.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6315.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6316.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  6317.                   else if (pp[0] != 0)
  6318.                     {
  6319.                        printf("OPT4 moidifier unknown. Must be or mask of:\n"
  6320.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6321.                        exit(-1);
  6322.                     }
  6323.                   break;
  6324.                }
  6325.           }
  6326.      }
  6327.    eb.any_mod = atoi(params[4]);
  6328.    eb.action = params[5];
  6329.    eb.params = params[6];
  6330.    REQ_5INT_2STRING_END(eb.context, eb.direction, eb.z, eb.modifiers, eb.any_mod, eb.action, eb.params, HDL);
  6331. #elif (TYPE == E_WM_IN)
  6332.    /* e_ipc decode request and do action */
  6333.    INT5_STRING2(v, HDL)
  6334.    E_Config_Binding_Wheel bind, *eb;
  6335.  
  6336.    bind.context = v->val1; 
  6337.    bind.direction = v->val2;
  6338.    bind.z = v->val3;
  6339.    bind.modifiers = v->val4;
  6340.    bind.any_mod = v->val5;
  6341.    bind.action = v->str1; 
  6342.    bind.params = v->str2;
  6343.  
  6344.    eb = e_config_binding_wheel_match(&bind);
  6345.    if (!eb)
  6346.      {
  6347.         eb = E_NEW(E_Config_Binding_Wheel, 1);
  6348.         e_config->wheel_bindings = evas_list_append(e_config->wheel_bindings, eb);
  6349.         eb->context = bind.context;
  6350.         eb->direction = bind.direction;
  6351.         eb->z = bind.z;
  6352.         eb->modifiers = bind.modifiers;
  6353.         eb->any_mod = bind.any_mod;
  6354.         if (bind.action) eb->action = evas_stringshare_add(bind.action);
  6355.         if (bind.params) eb->params = evas_stringshare_add(bind.params);
  6356.         e_bindings_wheel_add(bind.context, bind.direction, bind.z, bind.modifiers,
  6357.                  bind.any_mod, bind.action, bind.params);
  6358.         e_config_save_queue();  
  6359.      }
  6360.    END_INT5_STRING2(v);
  6361. #elif (TYPE == E_REMOTE_IN)
  6362. #endif
  6363. #undef HDL
  6364.  
  6365. /****************************************************************************/
  6366.  
  6367. #define HDL E_IPC_OP_BINDING_WHEEL_DEL
  6368. #if (TYPE == E_REMOTE_OPTIONS)
  6369.    /* e_remote define command line args */
  6370.    OP("-binding-wheel-del", 7, "Delete an existing wheel binding. OPT1 = Context, OPT2 = direction, OPT3 = z, OPT4 = modifiers, OPT5 = any modifier ok, OPT6 = action, OPT7 = action parameters", 0, HDL)
  6371. #elif (TYPE == E_REMOTE_OUT)
  6372.    /* e_remote parse command line args encode and send request */
  6373.    REQ_5INT_2STRING_START(HDL);
  6374.    E_Config_Binding_Wheel eb;
  6375.  
  6376.    if (!strcmp(params[0], "NONE")) eb.context = E_BINDING_CONTEXT_NONE;
  6377.    else if (!strcmp(params[0], "UNKNOWN")) eb.context = E_BINDING_CONTEXT_UNKNOWN;
  6378.    else if (!strcmp(params[0], "BORDER")) eb.context = E_BINDING_CONTEXT_BORDER;
  6379.    else if (!strcmp(params[0], "ZONE")) eb.context = E_BINDING_CONTEXT_ZONE;
  6380.    else if (!strcmp(params[0], "CONTAINER")) eb.context = E_BINDING_CONTEXT_CONTAINER;
  6381.    else if (!strcmp(params[0], "MANAGER")) eb.context = E_BINDING_CONTEXT_MANAGER;
  6382.    else if (!strcmp(params[0], "MENU")) eb.context = E_BINDING_CONTEXT_MENU;
  6383.    else if (!strcmp(params[0], "WINLIST")) eb.context = E_BINDING_CONTEXT_WINLIST;
  6384.    else if (!strcmp(params[0], "POPUP")) eb.context = E_BINDING_CONTEXT_POPUP;
  6385.    else if (!strcmp(params[0], "ANY")) eb.context = E_BINDING_CONTEXT_ANY;
  6386.    else
  6387.      {
  6388.         printf("OPT1 (CONTEXT) is not a valid context. Must be:\n"
  6389.                "  NONE UNKNOWN BORDER ZONE CONTAINER MANAGER MENU WINLIST POPUP ANY\n");
  6390.         exit(-1);
  6391.      }
  6392.    eb.direction = atoi(params[1]);
  6393.    eb.z = atoi(params[2]);
  6394.    /* M1[|M2...] */
  6395.      {
  6396.         char *p, *pp;
  6397.  
  6398.         eb.modifiers = 0;
  6399.         pp = params[3];
  6400.         for (;;)
  6401.           {
  6402.              p = strchr(pp, '|');
  6403.              if (p)
  6404.                {
  6405.                   if (!strncmp(pp, "SHIFT|", 6)) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6406.                   else if (!strncmp(pp, "CTRL|", 5)) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6407.                   else if (!strncmp(pp, "ALT|", 4)) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6408.                   else if (!strncmp(pp, "WIN|", 4)) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6409.                   else if (pp[0] != 0)
  6410.                     {
  6411.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  6412.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6413.                        exit(-1);
  6414.                     }
  6415.                   pp = p + 1;
  6416.                }
  6417.              else
  6418.                {
  6419.                   if (!strcmp(pp, "SHIFT")) eb.modifiers |= E_BINDING_MODIFIER_SHIFT;
  6420.                   else if (!strcmp(pp, "CTRL")) eb.modifiers |= E_BINDING_MODIFIER_CTRL;
  6421.                   else if (!strcmp(pp, "ALT")) eb.modifiers |= E_BINDING_MODIFIER_ALT;
  6422.                   else if (!strcmp(pp, "WIN")) eb.modifiers |= E_BINDING_MODIFIER_WIN;
  6423.                   else if (!strcmp(pp, "NONE")) eb.modifiers = E_BINDING_MODIFIER_NONE;
  6424.                   else if (pp[0] != 0)
  6425.                     {
  6426.                        printf("OPT3 moidifier unknown. Must be or mask of:\n"
  6427.                               "  SHIFT CTRL ALT WIN (eg SHIFT|CTRL or ALT|SHIFT|CTRL or ALT or just NONE)\n");
  6428.                        exit(-1);
  6429.                     }
  6430.                   break;
  6431.                }
  6432.           }
  6433.      }
  6434.    eb.any_mod = atoi(params[4]);
  6435.    eb.action = params[5];
  6436.    eb.params = params[6];
  6437.  
  6438.    REQ_5INT_2STRING_END(eb.context, eb.direction, eb.z, eb.modifiers, eb.any_mod, eb.action, eb.params, HDL);
  6439. #elif (TYPE == E_WM_IN)
  6440.    /* e_ipc decode request and do action */
  6441.    INT5_STRING2(v, HDL)
  6442.    E_Config_Binding_Wheel bind, *eb;
  6443.  
  6444.    bind.context = v->val1;
  6445.    bind.direction = v->val2;
  6446.    bind.z = v->val3;
  6447.    bind.modifiers = v->val4;
  6448.    bind.any_mod = v->val5;
  6449.    bind.action = v->str1;
  6450.    bind.params = v->str2;
  6451.    
  6452.    eb = e_config_binding_wheel_match(&bind);
  6453.    if (eb)
  6454.      {
  6455.     e_config->wheel_bindings = evas_list_remove(e_config->wheel_bindings, eb);
  6456.         if (eb->action) evas_stringshare_del(eb->action);
  6457.         if (eb->params) evas_stringshare_del(eb->params);
  6458.         E_FREE(eb);
  6459.         e_bindings_wheel_del(bind.context, bind.direction, bind.z, bind.modifiers,
  6460.                  bind.any_mod, bind.action, bind.params);
  6461.         e_config_save_queue();
  6462.      }
  6463.    END_INT5_STRING2(v);
  6464. #elif (TYPE == E_REMOTE_IN)
  6465. #endif
  6466. #undef HDL
  6467.  
  6468. /****************************************************************************/
  6469.  
  6470. #define HDL E_IPC_OP_WINLIST_LIST_FOCUS_WHILE_SELECTING_SET
  6471. #if (TYPE == E_REMOTE_OPTIONS)
  6472.    OP("-winlist-list-focus-while-selecting-set", 1, "Set winlist (alt+tab) focus while selecting policy", 0, HDL)
  6473. #elif (TYPE == E_REMOTE_OUT)
  6474.    REQ_INT(atoi(params[0]), HDL);
  6475. #elif (TYPE == E_WM_IN)
  6476.    START_INT(policy, HDL);
  6477.    e_config->winlist_list_focus_while_selecting = policy;
  6478.    E_CONFIG_LIMIT(e_config->winlist_list_focus_while_selecting, 0, 1);
  6479.    SAVE;
  6480.    END_INT;
  6481. #elif (TYPE == E_REMOTE_IN)
  6482. #endif
  6483. #undef HDL
  6484.  
  6485. /****************************************************************************/
  6486. #define HDL E_IPC_OP_WINLIST_LIST_FOCUS_WHILE_SELECTING_GET
  6487. #if (TYPE == E_REMOTE_OPTIONS)
  6488.    OP("-winlist-list-focus-while-selecting-get", 0, "Get winlist (alt+tab) focus while selecting policy", 1, HDL)
  6489. #elif (TYPE == E_REMOTE_OUT)
  6490.    REQ_NULL(HDL);
  6491. #elif (TYPE == E_WM_IN)
  6492.    SEND_INT(e_config->winlist_list_focus_while_selecting, E_IPC_OP_WINLIST_LIST_FOCUS_WHILE_SELECTING_GET_REPLY, HDL);
  6493. #elif (TYPE == E_REMOTE_IN)
  6494. #endif
  6495. #undef HDL
  6496.  
  6497. /****************************************************************************/
  6498. #define HDL E_IPC_OP_WINLIST_LIST_FOCUS_WHILE_SELECTING_GET_REPLY
  6499. #if (TYPE == E_REMOTE_OPTIONS)
  6500. #elif (TYPE == E_REMOTE_OUT)
  6501. #elif (TYPE == E_WM_IN)
  6502. #elif (TYPE == E_REMOTE_IN)
  6503.    START_INT(policy, HDL);
  6504.    printf("REPLY: POLICY=%d\n", policy);
  6505.    END_INT;
  6506. #endif
  6507. #undef HDL
  6508.  
  6509.  
  6510. /****************************************************************************/
  6511.  
  6512. #define HDL E_IPC_OP_WINLIST_LIST_RAISE_WHILE_SELECTING_SET
  6513. #if (TYPE == E_REMOTE_OPTIONS)
  6514.    OP("-winlist-list-raise-while-selecting-set", 1, "Set winlist (alt+tab) raise while selecting policy", 0, HDL)
  6515. #elif (TYPE == E_REMOTE_OUT)
  6516.    REQ_INT(atoi(params[0]), HDL);
  6517. #elif (TYPE == E_WM_IN)
  6518.    START_INT(policy, HDL);
  6519.    e_config->winlist_list_raise_while_selecting = policy;
  6520.    E_CONFIG_LIMIT(e_config->winlist_list_raise_while_selecting, 0, 1);
  6521.    SAVE;
  6522.    END_INT;
  6523. #elif (TYPE == E_REMOTE_IN)
  6524. #endif
  6525. #undef HDL
  6526.  
  6527. /****************************************************************************/
  6528. #define HDL E_IPC_OP_WINLIST_LIST_RAISE_WHILE_SELECTING_GET
  6529. #if (TYPE == E_REMOTE_OPTIONS)
  6530.    OP("-winlist-list-raise-while-selecting-get", 0, "Get winlist (alt+tab) raise while selecting policy", 1, HDL)
  6531. #elif (TYPE == E_REMOTE_OUT)
  6532.    REQ_NULL(HDL);
  6533. #elif (TYPE == E_WM_IN)
  6534.    SEND_INT(e_config->winlist_list_raise_while_selecting, E_IPC_OP_WINLIST_LIST_RAISE_WHILE_SELECTING_GET_REPLY, HDL);
  6535. #elif (TYPE == E_REMOTE_IN)
  6536. #endif
  6537. #undef HDL
  6538.  
  6539. /****************************************************************************/
  6540. #define HDL E_IPC_OP_WINLIST_LIST_RAISE_WHILE_SELECTING_GET_REPLY
  6541. #if (TYPE == E_REMOTE_OPTIONS)
  6542. #elif (TYPE == E_REMOTE_OUT)
  6543. #elif (TYPE == E_WM_IN)
  6544. #elif (TYPE == E_REMOTE_IN)
  6545.    START_INT(policy, HDL);
  6546.    printf("REPLY: POLICY=%d\n", policy);
  6547.    END_INT;
  6548. #endif
  6549. #undef HDL
  6550.  
  6551. /****************************************************************************/
  6552. #define HDL E_IPC_OP_THEME_CATEGORY_LIST
  6553. #if (TYPE == E_REMOTE_OPTIONS)
  6554.    OP("-theme-category-list", 0, "List all available theme categories", 1, HDL)
  6555. #elif (TYPE == E_REMOTE_OUT)
  6556.    REQ_NULL(HDL);
  6557. #elif (TYPE == E_WM_IN)
  6558.    GENERIC(HDL);
  6559.    LIST_DATA();
  6560.    ENCODE(e_theme_category_list(), e_ipc_codec_str_list_enc);
  6561.    SEND_DATA(E_IPC_OP_THEME_CATEGORY_LIST_REPLY);
  6562.    END_GENERIC();
  6563. #elif (TYPE == E_REMOTE_IN)
  6564. #endif
  6565. #undef HDL
  6566.      
  6567. /****************************************************************************/
  6568. #define HDL E_IPC_OP_THEME_CATEGORY_LIST_REPLY
  6569. #if (TYPE == E_REMOTE_OPTIONS)
  6570. #elif (TYPE == E_REMOTE_OUT)
  6571. #elif (TYPE == E_WM_IN)
  6572. #elif (TYPE == E_REMOTE_IN)
  6573.    GENERIC(HDL);
  6574.    LIST();
  6575.    DECODE(e_ipc_codec_str_list_dec) {
  6576.       FOR(dat) {
  6577.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  6578.       }
  6579.       FREE_LIST(dat);
  6580.    }
  6581.    END_GENERIC();
  6582. #endif
  6583. #undef HDL
  6584.  
  6585. /****************************************************************************/
  6586. #define HDL E_IPC_OP_TRANSITION_LIST
  6587. #if (TYPE == E_REMOTE_OPTIONS)
  6588.    OP("-transition-list", 0, "List all available transitions", 1, HDL)
  6589. #elif (TYPE == E_REMOTE_OUT)
  6590.    REQ_NULL(HDL);
  6591. #elif (TYPE == E_WM_IN)
  6592.    GENERIC(HDL);
  6593.    LIST_DATA();
  6594.    ENCODE(e_theme_transition_list(), e_ipc_codec_str_list_enc);
  6595.    SEND_DATA(E_IPC_OP_TRANSITION_LIST_REPLY);
  6596.    END_GENERIC();
  6597. #elif (TYPE == E_REMOTE_IN)
  6598. #endif
  6599. #undef HDL
  6600.      
  6601. /****************************************************************************/
  6602. #define HDL E_IPC_OP_TRANSITION_LIST_REPLY
  6603. #if (TYPE == E_REMOTE_OPTIONS)
  6604. #elif (TYPE == E_REMOTE_OUT)
  6605. #elif (TYPE == E_WM_IN)
  6606. #elif (TYPE == E_REMOTE_IN)
  6607.    GENERIC(HDL);
  6608.    LIST();
  6609.    DECODE(e_ipc_codec_str_list_dec) {
  6610.       FOR(dat) {
  6611.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  6612.       }
  6613.       FREE_LIST(dat);
  6614.    }
  6615.    END_GENERIC();
  6616. #endif
  6617. #undef HDL
  6618.  
  6619. /****************************************************************************/
  6620. #define HDL E_IPC_OP_ACTION_LIST
  6621. #if (TYPE == E_REMOTE_OPTIONS)
  6622.    OP("-action-list", 0, "List all available actions", 1, HDL)
  6623. #elif (TYPE == E_REMOTE_OUT)
  6624.    REQ_NULL(HDL);
  6625. #elif (TYPE == E_WM_IN)
  6626.    GENERIC(HDL);
  6627.    LIST_DATA();
  6628.    ENCODE(e_action_name_list(), e_ipc_codec_str_list_enc);
  6629.    SEND_DATA(E_IPC_OP_ACTION_LIST_REPLY);
  6630.    END_GENERIC();
  6631. #elif (TYPE == E_REMOTE_IN)
  6632. #endif
  6633. #undef HDL
  6634.      
  6635. /****************************************************************************/
  6636. #define HDL E_IPC_OP_ACTION_LIST_REPLY
  6637. #if (TYPE == E_REMOTE_OPTIONS)
  6638. #elif (TYPE == E_REMOTE_OUT)
  6639. #elif (TYPE == E_WM_IN)
  6640. #elif (TYPE == E_REMOTE_IN)
  6641.    GENERIC(HDL);
  6642.    LIST();
  6643.    DECODE(e_ipc_codec_str_list_dec) {
  6644.       FOR(dat) {
  6645.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  6646.       }
  6647.       FREE_LIST(dat);
  6648.    }
  6649.    END_GENERIC();
  6650. #endif
  6651. #undef HDL
  6652.  
  6653. /****************************************************************************/
  6654. #define HDL E_IPC_OP_PROFILE_ADD
  6655. #if (TYPE == E_REMOTE_OPTIONS)
  6656.    OP("-profile-add", 1, "Add profile named OPT1", 0, HDL)
  6657. #elif (TYPE == E_REMOTE_OUT)
  6658.    REQ_STRING(params[0], HDL);
  6659. #elif (TYPE == E_WM_IN)
  6660.    STRING(s, HDL);
  6661.    e_config_profile_add(s);
  6662.    END_STRING(s);
  6663. #elif (TYPE == E_REMOTE_IN)
  6664. #endif
  6665. #undef HDL
  6666.  
  6667. /****************************************************************************/
  6668. #define HDL E_IPC_OP_PROFILE_DEL
  6669. #if (TYPE == E_REMOTE_OPTIONS)
  6670.    OP("-profile-del", 1, "Delete profile named OPT1", 0, HDL)
  6671. #elif (TYPE == E_REMOTE_OUT)
  6672.    REQ_STRING(params[0], HDL);
  6673. #elif (TYPE == E_WM_IN)
  6674.    STRING(s, HDL);
  6675.    if (!strcmp(e_config_profile_get(), s))
  6676.      {
  6677.     printf("Can't delete active profile\n");
  6678.     exit(-1);
  6679.      }
  6680.    e_config_profile_del(s);
  6681.    END_STRING(s);
  6682. #elif (TYPE == E_REMOTE_IN)
  6683. #endif
  6684. #undef HDL
  6685.  
  6686. /****************************************************************************/
  6687. #define HDL E_IPC_OP_DEFAULT_ENGINE_SET
  6688. #if (TYPE == E_REMOTE_OPTIONS)
  6689.    OP("-default-engine-set", 1, "Set the default rendering engine to OPT1 (SOFTWARE or XRENDER)", 0, HDL)
  6690. #elif (TYPE == E_REMOTE_OUT)
  6691.    REQ_INT_START(HDL)
  6692.    int value = 0;
  6693.    if (!strcmp(params[0], "SOFTWARE")) value = E_EVAS_ENGINE_SOFTWARE_X11;
  6694.    else if (!strcmp(params[0], "GL"))
  6695.      {
  6696.     value = E_EVAS_ENGINE_GL_X11;
  6697.     printf("GL engine is disabled as default engine.\n");
  6698.     exit(-1);
  6699.      }
  6700.    else if (!strcmp(params[0], "XRENDER")) value = E_EVAS_ENGINE_XRENDER_X11;
  6701.    else
  6702.      {
  6703.     printf("engine must be SOFTWARE or XRENDER\n");
  6704.     exit(-1);
  6705.      }
  6706.    REQ_INT_END(value, HDL);
  6707. #elif (TYPE == E_WM_IN)
  6708.    START_INT(value, HDL);
  6709.    e_config->evas_engine_default = value;
  6710.    E_CONFIG_LIMIT(e_config->evas_engine_default, E_EVAS_ENGINE_SOFTWARE_X11, E_EVAS_ENGINE_XRENDER_X11);
  6711.    SAVE;
  6712.    END_INT;
  6713. #elif (TYPE == E_REMOTE_IN)
  6714. #endif
  6715. #undef HDL
  6716.  
  6717. /****************************************************************************/
  6718. #define HDL E_IPC_OP_DEFAULT_ENGINE_GET
  6719. #if (TYPE == E_REMOTE_OPTIONS)
  6720.    OP("-default-engine-get", 0, "Get the default rendering engine", 1, HDL)
  6721. #elif (TYPE == E_REMOTE_OUT)
  6722.    REQ_NULL(HDL);
  6723. #elif (TYPE == E_WM_IN)
  6724.    SEND_INT(e_config->evas_engine_default, E_IPC_OP_DEFAULT_ENGINE_GET_REPLY, HDL);
  6725. #elif (TYPE == E_REMOTE_IN)
  6726. #endif
  6727. #undef HDL
  6728.      
  6729. /****************************************************************************/
  6730. #define HDL E_IPC_OP_DEFAULT_ENGINE_GET_REPLY
  6731. #if (TYPE == E_REMOTE_OPTIONS)
  6732. #elif (TYPE == E_REMOTE_OUT)
  6733. #elif (TYPE == E_WM_IN)
  6734. #elif (TYPE == E_REMOTE_IN)
  6735.    START_INT(engine, HDL);
  6736.    if (engine == E_EVAS_ENGINE_SOFTWARE_X11)
  6737.      printf("REPLY: SOFTWARE\n");
  6738.    else if (engine == E_EVAS_ENGINE_GL_X11)
  6739.      printf("REPLY: GL\n");
  6740.    else if (engine == E_EVAS_ENGINE_XRENDER_X11)
  6741.      printf("REPLY: XRENDER\n");
  6742.    else
  6743.      printf("REPLY: UNKNOWN ENGINE: %d\n", engine);
  6744.    END_INT
  6745. #endif
  6746. #undef HDL
  6747.  
  6748. /****************************************************************************/
  6749. #define HDL E_IPC_OP_ENGINE_LIST
  6750. #if (TYPE == E_REMOTE_OPTIONS)
  6751.    OP("-engine-list", 0, "List all existing rendering engines", 1, HDL)
  6752. #elif (TYPE == E_REMOTE_OUT)
  6753.    REQ_NULL(HDL);
  6754. #elif (TYPE == E_WM_IN)
  6755.    GENERIC(HDL);
  6756.    LIST_DATA();
  6757.    Evas_List *engines;
  6758.    engines = e_config_engine_list();
  6759.    ENCODE(engines, e_ipc_codec_str_list_enc);
  6760.    SEND_DATA(E_IPC_OP_ENGINE_LIST_REPLY);
  6761.    FREE_LIST(engines);
  6762.    END_GENERIC();
  6763. #elif (TYPE == E_REMOTE_IN)
  6764. #endif
  6765. #undef HDL
  6766.  
  6767. /****************************************************************************/
  6768. #define HDL E_IPC_OP_ENGINE_LIST_REPLY
  6769. #if (TYPE == E_REMOTE_OPTIONS)
  6770. #elif (TYPE == E_REMOTE_OUT)
  6771. #elif (TYPE == E_WM_IN)
  6772. #elif (TYPE == E_REMOTE_IN)
  6773.    GENERIC(HDL);
  6774.    LIST();
  6775.    DECODE(e_ipc_codec_str_list_dec) {
  6776.       FOR(dat) {
  6777.      printf("REPLY: \"%s\"\n", (char *)(l->data));
  6778.       }
  6779.       FREE_LIST(dat);
  6780.    }
  6781.    END_GENERIC();
  6782. #endif
  6783. #undef HDL
  6784.  
  6785. /****************************************************************************/
  6786. #define HDL E_IPC_OP_ENGINE_SET
  6787. #if (TYPE == E_REMOTE_OPTIONS)
  6788.    OP("-engine-set", 2, "Set the rendering engine for OPT1 to OPT2 (SOFTWARE or XRENDER)", 0, HDL)
  6789. #elif (TYPE == E_REMOTE_OUT)
  6790.    REQ_2INT_START(HDL)
  6791.    int context = 0, engine = 0;
  6792.    if (!strcmp(params[0], "INIT")) context = E_ENGINE_CONTEXT_INIT;
  6793.    else if (!strcmp(params[0], "CONTAINER")) context = E_ENGINE_CONTEXT_CONTAINER;
  6794.    else if (!strcmp(params[0], "ZONE")) context = E_ENGINE_CONTEXT_ZONE;
  6795.    else if (!strcmp(params[0], "BORDER")) context = E_ENGINE_CONTEXT_BORDER;
  6796.    else if (!strcmp(params[0], "MENU")) context = E_ENGINE_CONTEXT_MENU;
  6797.    else if (!strcmp(params[0], "ERROR")) context = E_ENGINE_CONTEXT_ERROR;
  6798.    else if (!strcmp(params[0], "WIN")) context = E_ENGINE_CONTEXT_WIN;
  6799.    else if (!strcmp(params[0], "POPUP")) context = E_ENGINE_CONTEXT_POPUP;
  6800.    else if (!strcmp(params[0], "DRAG")) context = E_ENGINE_CONTEXT_DRAG;
  6801.    else
  6802.      {
  6803.      printf("context must be INIT, CONTAINER, ZONE, BORDER, MENU, ERROR, WIN, POPUP or DRAG\n");
  6804.      exit(-1);
  6805.      }
  6806.    if (!strcmp(params[1], "DEFAULT")) engine = E_EVAS_ENGINE_DEFAULT;
  6807.    else if (!strcmp(params[1], "SOFTWARE")) engine = E_EVAS_ENGINE_SOFTWARE_X11;
  6808.    else if (!strcmp(params[1], "GL"))
  6809.      {
  6810.     engine = E_EVAS_ENGINE_GL_X11;
  6811.     printf("GL engine is disabled as default engine.\n");
  6812.     exit(-1);
  6813.      }
  6814.    else if (!strcmp(params[1], "XRENDER")) engine = E_EVAS_ENGINE_XRENDER_X11;
  6815.    else
  6816.      {
  6817.      printf("engine must be DEFAULT, SOFTWARE or XRENDER\n");
  6818.      exit(-1);
  6819.      }
  6820.    REQ_2INT_END(context, engine, HDL);
  6821. #elif (TYPE == E_WM_IN)
  6822.    START_2INT(context, engine, HDL);
  6823.    switch (context)
  6824.      {
  6825.       case E_ENGINE_CONTEXT_INIT:
  6826.      e_config->evas_engine_init = engine;
  6827.      E_CONFIG_LIMIT(e_config->evas_engine_init, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6828.      break;
  6829.       case E_ENGINE_CONTEXT_CONTAINER:
  6830.      e_config->evas_engine_container = engine;
  6831.      E_CONFIG_LIMIT(e_config->evas_engine_container, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6832.      break;
  6833.       case E_ENGINE_CONTEXT_ZONE:
  6834.      e_config->evas_engine_zone = engine;
  6835.      E_CONFIG_LIMIT(e_config->evas_engine_zone, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6836.      break;
  6837.       case E_ENGINE_CONTEXT_BORDER:
  6838.      e_config->evas_engine_borders = engine;
  6839.      E_CONFIG_LIMIT(e_config->evas_engine_borders, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6840.      break;
  6841.       case E_ENGINE_CONTEXT_MENU:
  6842.      e_config->evas_engine_menus = engine;
  6843.      E_CONFIG_LIMIT(e_config->evas_engine_menus, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6844.      break;
  6845.       case E_ENGINE_CONTEXT_ERROR:
  6846.      e_config->evas_engine_errors = engine;
  6847.      E_CONFIG_LIMIT(e_config->evas_engine_errors, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6848.      break;
  6849.       case E_ENGINE_CONTEXT_WIN:
  6850.      e_config->evas_engine_win = engine;
  6851.      E_CONFIG_LIMIT(e_config->evas_engine_win, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6852.      break;
  6853.       case E_ENGINE_CONTEXT_POPUP:
  6854.      e_config->evas_engine_popups = engine;
  6855.      E_CONFIG_LIMIT(e_config->evas_engine_popups, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6856.      break;
  6857.       case E_ENGINE_CONTEXT_DRAG:
  6858.      e_config->evas_engine_drag = engine;
  6859.      E_CONFIG_LIMIT(e_config->evas_engine_drag, E_EVAS_ENGINE_DEFAULT, E_EVAS_ENGINE_XRENDER_X11);
  6860.      break;
  6861.       default:
  6862.      printf("Unknown context: %d\n", context);
  6863.      break;
  6864.      }
  6865.    SAVE;
  6866.    END_2INT;
  6867. #elif (TYPE == E_REMOTE_IN)
  6868. #endif
  6869. #undef HDL
  6870.  
  6871. /****************************************************************************/
  6872. #define HDL E_IPC_OP_ENGINE_GET
  6873. #if (TYPE == E_REMOTE_OPTIONS)
  6874.    OP("-engine-get", 1, "Get the rendering engine for OPT1", 1, HDL)
  6875. #elif (TYPE == E_REMOTE_OUT)
  6876.    REQ_INT(atoi(params[0]), HDL);
  6877. #elif (TYPE == E_WM_IN)
  6878.    START_INT(context, HDL);
  6879.    int engine = 0;
  6880.    /* TODO, this should come from a define */
  6881.    int bytes = 0;
  6882.    switch (context)
  6883.      {
  6884.       case E_ENGINE_CONTEXT_INIT:
  6885.      engine = e_config->evas_engine_init;
  6886.      break;
  6887.       case E_ENGINE_CONTEXT_CONTAINER:
  6888.      engine = e_config->evas_engine_container;
  6889.      break;
  6890.       case E_ENGINE_CONTEXT_ZONE:
  6891.      engine = e_config->evas_engine_zone;
  6892.      break;
  6893.       case E_ENGINE_CONTEXT_BORDER:
  6894.      engine = e_config->evas_engine_borders;
  6895.      break;
  6896.       case E_ENGINE_CONTEXT_MENU:
  6897.      engine = e_config->evas_engine_menus;
  6898.      break;
  6899.       case E_ENGINE_CONTEXT_ERROR:
  6900.      engine = e_config->evas_engine_errors;
  6901.      break;
  6902.       case E_ENGINE_CONTEXT_WIN:
  6903.      engine = e_config->evas_engine_win;
  6904.      break;
  6905.       case E_ENGINE_CONTEXT_POPUP:
  6906.      engine = e_config->evas_engine_popups;
  6907.      break;
  6908.       case E_ENGINE_CONTEXT_DRAG:
  6909.      engine = e_config->evas_engine_drag;
  6910.      break;
  6911.       default:
  6912.      printf("Unknown context: %d\n", context);
  6913.      break;
  6914.      }
  6915.    ENCODE(engine, e_ipc_codec_int_enc);
  6916.    SEND_DATA(E_IPC_OP_ENGINE_GET_REPLY);
  6917.  
  6918.    END_INT;
  6919. #elif (TYPE == E_REMOTE_IN)
  6920. #endif
  6921. #undef HDL
  6922.      
  6923. /****************************************************************************/
  6924. #define HDL E_IPC_OP_ENGINE_GET_REPLY
  6925. #if (TYPE == E_REMOTE_OPTIONS)
  6926. #elif (TYPE == E_REMOTE_OUT)
  6927. #elif (TYPE == E_WM_IN)
  6928. #elif (TYPE == E_REMOTE_IN)
  6929.    START_INT(engine, HDL);
  6930.    if (engine == E_EVAS_ENGINE_DEFAULT)
  6931.      printf("REPLY: DEFAULT\n");
  6932.    else if (engine == E_EVAS_ENGINE_SOFTWARE_X11)
  6933.      printf("REPLY: SOFTWARE\n");
  6934.    else if (engine == E_EVAS_ENGINE_GL_X11)
  6935.      printf("REPLY: GL\n");
  6936.    else if (engine == E_EVAS_ENGINE_XRENDER_X11)
  6937.      printf("REPLY: XRENDER\n");
  6938.    else
  6939.      printf("REPLY: UNKNOWN ENGINE: %d\n", engine);
  6940.    END_INT;
  6941. #endif
  6942. #undef HDL
  6943.  
  6944.  
  6945. /****************************************************************************/
  6946. #define HDL E_IPC_OP_MENU_EAP_NAME_SHOW_SET
  6947. #if (TYPE == E_REMOTE_OPTIONS)
  6948.    OP("-menu-eap-name-show-set", 1, "Set whether to show eapps' name field in menus", 0, HDL)
  6949. #elif (TYPE == E_REMOTE_OUT)
  6950.    REQ_INT(atoi(params[0]), HDL);
  6951. #elif (TYPE == E_WM_IN)
  6952.    START_INT(val, HDL);
  6953.    e_config->menu_eap_name_show = val;
  6954.    E_CONFIG_LIMIT(e_config->menu_eap_name_show, 0, 1);
  6955.    SAVE;
  6956.    END_INT;
  6957. #elif (TYPE == E_REMOTE_IN)
  6958. #endif
  6959. #undef HDL
  6960.  
  6961. /****************************************************************************/
  6962. #define HDL E_IPC_OP_MENU_EAP_NAME_SHOW_GET
  6963. #if (TYPE == E_REMOTE_OPTIONS)
  6964.    OP("-menu-eap-name-show-get", 0, "Get whether eapps' name field is shown in menus", 1, HDL)
  6965. #elif (TYPE == E_REMOTE_OUT)
  6966.    REQ_NULL(HDL);
  6967. #elif (TYPE == E_WM_IN)
  6968.    SEND_INT(e_config->menu_eap_name_show, E_IPC_OP_MENU_EAP_NAME_SHOW_GET_REPLY, HDL);
  6969. #elif (TYPE == E_REMOTE_IN)
  6970. #endif
  6971. #undef HDL
  6972.  
  6973. /****************************************************************************/
  6974. #define HDL E_IPC_OP_MENU_EAP_NAME_SHOW_GET_REPLY
  6975. #if (TYPE == E_REMOTE_OPTIONS)
  6976. #elif (TYPE == E_REMOTE_OUT)
  6977. #elif (TYPE == E_WM_IN)
  6978. #elif (TYPE == E_REMOTE_IN)
  6979.    START_INT(val, HDL);
  6980.    printf("REPLY: %d\n", val);
  6981.    END_INT;
  6982. #endif
  6983. #undef HDL
  6984.  
  6985. /****************************************************************************/
  6986. #define HDL E_IPC_OP_MENU_EAP_GENERIC_SHOW_SET
  6987. #if (TYPE == E_REMOTE_OPTIONS)
  6988.    OP("-menu-eap-generic-show-set", 1, "Set whether to show eapps' generic field in menus", 0, HDL)
  6989. #elif (TYPE == E_REMOTE_OUT)
  6990.    REQ_INT(atoi(params[0]), HDL);
  6991. #elif (TYPE == E_WM_IN)
  6992.    START_INT(val, HDL);
  6993.    e_config->menu_eap_generic_show = val;
  6994.    E_CONFIG_LIMIT(e_config->menu_eap_generic_show, 0, 1);
  6995.    SAVE;
  6996.    END_INT;
  6997. #elif (TYPE == E_REMOTE_IN)
  6998. #endif
  6999. #undef HDL
  7000.  
  7001. /****************************************************************************/
  7002. #define HDL E_IPC_OP_MENU_EAP_GENERIC_SHOW_GET
  7003. #if (TYPE == E_REMOTE_OPTIONS)
  7004.    OP("-menu-eap-generic-show-get", 0, "Get whether eapps' generic field is shown in menus", 1, HDL)
  7005. #elif (TYPE == E_REMOTE_OUT)
  7006.    REQ_NULL(HDL);
  7007. #elif (TYPE == E_WM_IN)
  7008.    SEND_INT(e_config->menu_eap_generic_show, E_IPC_OP_MENU_EAP_GENERIC_SHOW_GET_REPLY, HDL);
  7009. #elif (TYPE == E_REMOTE_IN)
  7010. #endif
  7011. #undef HDL
  7012.  
  7013. /****************************************************************************/
  7014. #define HDL E_IPC_OP_MENU_EAP_GENERIC_SHOW_GET_REPLY
  7015. #if (TYPE == E_REMOTE_OPTIONS)
  7016. #elif (TYPE == E_REMOTE_OUT)
  7017. #elif (TYPE == E_WM_IN)
  7018. #elif (TYPE == E_REMOTE_IN)
  7019.    START_INT(val, HDL);
  7020.    printf("REPLY: %d\n", val);
  7021.    END_INT;
  7022. #endif
  7023. #undef HDL
  7024.  
  7025. /****************************************************************************/
  7026. #define HDL E_IPC_OP_MENU_EAP_COMMENT_SHOW_SET
  7027. #if (TYPE == E_REMOTE_OPTIONS)
  7028.    OP("-menu-eap-comment-show-set", 1, "Set whether to show eapps' comment field in menus", 0, HDL)
  7029. #elif (TYPE == E_REMOTE_OUT)
  7030.    REQ_INT(atoi(params[0]), HDL);
  7031. #elif (TYPE == E_WM_IN)
  7032.    START_INT(val, HDL);
  7033.    e_config->menu_eap_comment_show = val;
  7034.    E_CONFIG_LIMIT(e_config->menu_eap_comment_show, 0, 1);
  7035.    SAVE;
  7036.    END_INT;
  7037. #elif (TYPE == E_REMOTE_IN)
  7038. #endif
  7039. #undef HDL
  7040.  
  7041. /****************************************************************************/
  7042. #define HDL E_IPC_OP_MENU_EAP_COMMENT_SHOW_GET
  7043. #if (TYPE == E_REMOTE_OPTIONS)
  7044.    OP("-menu-eap-comment-show-get", 0, "Get whether eapps' comment field is shown in menus", 1, HDL)
  7045. #elif (TYPE == E_REMOTE_OUT)
  7046.    REQ_NULL(HDL);
  7047. #elif (TYPE == E_WM_IN)
  7048.    SEND_INT(e_config->menu_eap_comment_show, E_IPC_OP_MENU_EAP_COMMENT_SHOW_GET_REPLY, HDL);
  7049. #elif (TYPE == E_REMOTE_IN)
  7050. #endif
  7051. #undef HDL
  7052.  
  7053. /****************************************************************************/
  7054. #define HDL E_IPC_OP_MENU_EAP_COMMENT_SHOW_GET_REPLY
  7055. #if (TYPE == E_REMOTE_OPTIONS)
  7056. #elif (TYPE == E_REMOTE_OUT)
  7057. #elif (TYPE == E_WM_IN)
  7058. #elif (TYPE == E_REMOTE_IN)
  7059.    START_INT(val, HDL);
  7060.    printf("REPLY: %d\n", val);
  7061.    END_INT;
  7062. #endif
  7063. #undef HDL
  7064.  
  7065. /****************************************************************************/
  7066. #define HDL E_IPC_OP_FULLSCREEN_POLICY_SET
  7067. #if (TYPE == E_REMOTE_OPTIONS)
  7068.    OP("-fullscreen-policy-set", 1, "Set the fullscreen policy. OPT1 = RESIZE or ZOOM", 0, HDL)
  7069. #elif (TYPE == E_REMOTE_OUT)
  7070.    REQ_INT_START(HDL)
  7071.    int value = 0;
  7072.    if (!strcmp(params[0], "RESIZE")) value = E_FULLSCREEN_RESIZE;
  7073.    else if (!strcmp(params[0], "ZOOM")) value = E_FULLSCREEN_ZOOM;
  7074.    else
  7075.      {
  7076.      printf("fullscreen must be RESIZE or ZOOM\n");
  7077.      exit(-1);
  7078.      }
  7079.    REQ_INT_END(value, HDL);
  7080. #elif (TYPE == E_WM_IN)
  7081.    START_INT(value, HDL);
  7082.    e_config->fullscreen_policy = value;
  7083.    E_CONFIG_LIMIT(e_config->fullscreen_policy, E_FULLSCREEN_RESIZE, E_FULLSCREEN_ZOOM);
  7084.    SAVE;
  7085.    END_INT
  7086. #elif (TYPE == E_REMOTE_IN)
  7087. #endif
  7088. #undef HDL
  7089.  
  7090. /****************************************************************************/
  7091. #define HDL E_IPC_OP_FULLSCREEN_POLICY_GET
  7092. #if (TYPE == E_REMOTE_OPTIONS)
  7093.    OP("-fullscreen-policy-get", 0, "Get fullscreen policy", 1, HDL)
  7094. #elif (TYPE == E_REMOTE_OUT)
  7095.    REQ_NULL(HDL);
  7096. #elif (TYPE == E_WM_IN)
  7097.    SEND_INT(e_config->fullscreen_policy, E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY, HDL);
  7098. #elif (TYPE == E_REMOTE_IN)
  7099. #endif
  7100. #undef HDL
  7101.  
  7102. /****************************************************************************/
  7103. #define HDL E_IPC_OP_FULLSCREEN_POLICY_GET_REPLY
  7104. #if (TYPE == E_REMOTE_OPTIONS)
  7105. #elif (TYPE == E_REMOTE_OUT)
  7106. #elif (TYPE == E_WM_IN)
  7107. #elif (TYPE == E_REMOTE_IN)
  7108.    START_INT(policy, HDL);
  7109.    if (policy == E_FULLSCREEN_RESIZE)
  7110.      printf("REPLY: RESIZE\n");
  7111.    else if (policy == E_FULLSCREEN_ZOOM)
  7112.      printf("REPLY: ZOOM\n");
  7113.    END_INT
  7114. #endif
  7115. #undef HDL
  7116. /****************************************************************************/
  7117.